打印对象

一份设置为A3纸张, 页面边距为(10, 10, 10, 10)mm的PDF文件.

PageFormat

默认PDFPrintable无法设置页面大小.

1         PDFPrintable printable = new PDFPrintable(document);
2         PrinterJob job = PrinterJob.getPrinterJob();
3         job.setPrintable(printable);

需要把它放到一个Book中, 再设置即可

1         Book book = new Book();
2         book.append(printable, pageFormat);
3         printerJob.setPageable(book);
4         printerJob.print();

设置纸张属性

1         Paper paper = new Paper();
2         paper.setSize(width, height);
3         // 设置边距
4         paper.setImageableArea(marginLeft, marginRight, width - (marginLeft + marginRight), height - (marginTop + marginBottom));
5         // 自定义页面设置
6         PageFormat pageFormat = new PageFormat();
7         // 设置页面横纵向
8         pageFormat.setOrientation(PageFormat.PORTRAIT);
9         pageFormat.setPaper(paper);

注意: 这边计量单位都是在dpi 72下的尺寸.

如果拿到是mm, 需要转为px. 例如10mm转换

10 * 72 * 10 / 254 = 28px

如果打印出现了截断, 一般是因为没有添加自定义纸张导致的.

参考 Java读取打印机自定义纸张.

完整代码如下

 1         InputStream in = new FileInputStream("d:\\a3.pdf");
 2         PDDocument document = PDDocument.load(in);
 3         PDFPrintable printable = new PDFPrintable(document, Scaling.ACTUAL_SIZE);
 4
 5         PrinterJob printerJob = PrinterJob.getPrinterJob();
 6
 7         PaperSize a3 = PaperSize.PAPERSIZE_A3;
 8         // A3 纸张在72 dpi下的宽高 841 * 1190
 9         int width = a3.getWidth().toPixI(72);
10         int height = a3.getHeight().toPixI(72);
11         // 10mm边距, 对应 28px
12         int marginLeft = 28;
13         int marginRight = 28;
14         int marginTop = 28;
15         int marginBottom = 28;
16
17         Paper paper = new Paper();
18         paper.setSize(width, height);
19         // 设置边距
20         paper.setImageableArea(marginLeft, marginRight, width - (marginLeft + marginRight), height - (marginTop + marginBottom));
21         // 自定义页面设置
22         PageFormat pageFormat = new PageFormat();
23         // 设置页面横纵向
24         pageFormat.setOrientation(PageFormat.PORTRAIT);
25         pageFormat.setPaper(paper);
26
27         Book book = new Book();
28         book.append(printable, pageFormat);
29         printerJob.setPageable(book);
30         printerJob.print();

View Code

转载于:https://www.cnblogs.com/xdecode/p/7977324.html

Java调用PDFBox打印自定义纸张PDF相关推荐

  1. Java调用打印机打印(远程、本地皆可用)

    Java调用打印机打印(远程.本地皆可用) 背景 准备 MAVEN环境 步骤 获取PrinterJob 设置PrinterJob纸张样式 打印PDF 背景 开发个Java项目需要远程调用共享打印机打印 ...

  2. 弄了一整天,终于把打印自定义纸张大小搞定了(上)--IT man

    Csdn-Blog <script language="javascript" src="http://www.023rcsc.com/count/count2.a ...

  3. Java调用打印机打印pdf

    要在Java中调用打印机打印PDF,可以使用Java打印API和第三方库,如Apache PDFBox或iText PDF. 以下是使用Java打印API打印PDF的基本步骤: 安装打印机:确保您已经 ...

  4. pb11 打印 自定义纸张_pb自定义纸张(连续走纸)

    Pb中定制打印页长实现连续打印 pb与打印机的通讯使用ASCII码进行,其中标准ASCII码包括可打印字符及非打印字符(控制码), 打印机使用控制码来定制打印机.大多数打印机指令使用控制码escape ...

  5. 弄了一整天,终于把打印自定义纸张大小搞定了

    长江支流说的办法保留太多了,结果不行,很多类都是他在程序集里自定义的,源码又没公开 不过还是要感谢他的提示 今天和小陈搞了一天,他在国外的论坛上看到了一篇文章得到了启示,最后我们在凌晨3点终于把自定义 ...

  6. Java使用 PDFBox 2.0 从 PDF 文档中读取所有文本

    在本教程中,我们将学习在 Java 程序中使用 PDFBox 2.0 库从 pdf 文档中读取所有文本. PDF 文档可能包含文本.嵌入图像等作为其内容.PDFBox 中的 PDFTextStripp ...

  7. java 调用打印机打印

    要在 Java 中调用打印机打印,您可以使用 Java 的打印 API.下面是一个简单的示例,展示了如何使用 Java 打印 API 来打印文本: import java.awt.print.Prin ...

  8. java调用热敏打印机打印(包含二维码生成)

    项目中需要用到热敏打印机,并且在打印的同时,要生成二维码.并且打印,先说说二维码的生成吧 package com.jinke.util; import com.google.zxing.common. ...

  9. XtraReport报表打印自定义纸张问题

    当在打印 机设置完自定义纸张后 设置User Paper为YES后,指定打印机,页面就采用了打印机的默认纸张了. 可在属性中设置需指向的打印机 Printer Name来设置打印机,Paper Kin ...

最新文章

  1. [WPF]winfom中ShowWPF新窗口时TextBox等控件无法输入问题解决方法 .
  2. r语言向量代码如何创建函数c,R中向量基本操作:创建、运算、访问
  3. Python必备收藏!Pycharm 常用快捷键方式!让鼠标离手操作
  4. 如何检查某个用户是否具有某个权限对象上定义的某种权限
  5. CRM product UI里assignment block的显示隐藏逻辑
  6. Java中的多重继承与组合vs继承
  7. android实现直接发短信,android5.0以上版本如何直接发送短信?
  8. Android TV开发总结【适配】
  9. 如何快速将MOV格式视频转换成MP4格式
  10. 多次引用同一脚注或尾注
  11. java 获取某一日期的0点0分0秒和23点59分59秒
  12. XMind 2022 for Mac(思维导图软件)中文免费版
  13. iphone粘贴关联_如何将电话号码粘贴到iPhone的电话应用程序中
  14. 字节跳动后台开发实习面试回顾
  15. 知道两点经纬度,计算双方距离与方向的原理
  16. 转战物联网·基础篇12-了解物联网之物连接相关通信技术(1)
  17. 数据结构之广义表(C语言)
  18. DCS概念简述——以教学用ABB HT 600控制系统/WinCS为例
  19. 百度搜索公正性彻底调查
  20. 海尔旗下有屋智能IPO被终止:年应收账款10亿 受恒大拖累

热门文章

  1. Claustrophobic Cows
  2. pig对null的处理(实际,对空文本处理为两种取值null或‘’)
  3. windows程序运行找不到msvcp120d .dll,无法继续执行代码
  4. 基于javaweb+springboot的小区物业管理系统(java+Springboot+ssm+mysql+maven)
  5. NBT封面:水稻NRT1.1B基因调控根系微生物组参与氮利用(作者解读)
  6. I3C总线HDR模式研读
  7. windows/mac在本地电脑上搭建AI人工智能绘画工具Stable Diffusion
  8. java qq项目_Java版QQ项目
  9. 遗忘之战2.1_FS无CD地图
  10. vs2010c语言命令行参数,模仿Visual Studio————命令行编译C/C++程序