前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java调用PDFBox打印自定义纸张PDF

Java调用PDFBox打印自定义纸张PDF

作者头像
用户1216491
发布2018-01-24 16:02:12
4.8K0
发布2018-01-24 16:02:12
举报
文章被收录于专栏:xdecodexdecode

打印对象

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

PageFormat

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

代码语言:javascript
复制
1         PDFPrintable printable = new PDFPrintable(document);
2         PrinterJob job = PrinterJob.getPrinterJob();
3         job.setPrintable(printable);

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

代码语言:javascript
复制
1         Book book = new Book();
2         book.append(printable, pageFormat);
3         printerJob.setPageable(book);
4         printerJob.print();

设置纸张属性

代码语言:javascript
复制
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读取打印机自定义纸张.

完整代码如下

代码语言:javascript
复制
 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();
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-12-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 打印对象
  • PageFormat
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档