Java调用PDFBox打印自定义纸张PDF
时间:2022-04-24
本文章向大家介绍Java调用PDFBox打印自定义纸张PDF,主要内容包括打印对象、PageFormat、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
打印对象
一份设置为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();
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Android PhoneWindowManager监听屏幕右侧向左滑动实现返回功能
- Laravel框架创建路由的方法详解
- Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
- 解决Laravel blade模板转义html标签的问题
- laravel 配置路由 api和web定义的路由的区别详解
- Flutter 实现网易云音乐字幕的代码
- Yii框架通过请求组件处理get,post请求的方法分析
- PHP实现单文件、多个单文件、多文件上传函数的封装示例
- Android自定义控件单位尺寸实现代码
- Android中socket通信的简单实现
- Thinkphp5框架使用validate实现验证功能的方法
- Android通过Java sdk的方式接入OpenCv的方法
- php+js实现的无刷新下载文件功能示例
- Android如何获取视频首帧图片
- PHP单文件上传原理及上传函数的封装操作示例