PDFBox创建并打印PDF文件, 以及缩放问题的处理.
PDFBox带了一些很方便的API, 可以直接创建 读取 编辑 打印PDF文件.
创建PDF文件
public static byte[] createHelloPDF() {
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
PDDocument doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage(page);
PDFont font = PDType1Font.HELVETICA_BOLD;
PDPageContentStream content = new PDPageContentStream(doc, page);
content.beginText();
content.setFont(font, 20);
content.moveTextPositionByAmount(250, 700);
content.drawString("Hello Print!"); content.endText();
content.close();
doc.save(out);
doc.close();
} catch (Exception e) {
e.printStackTrace();
}
return out.toByteArray();
}
这边如果不把他save到byte[]里, 而是直接close, 返回PDDocument 给外部文件.
可能会出现Cannot read while there is an open stream writer
打印文件
// 获取本地创建的空白PDF文件
PDDocument document = PDDocument.load(createHelloPDF());
// 加载成打印文件
PDFPrintable printable = new PDFPrintable(document);
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(printable);
job.print();
如需要打印自定义纸张, 参加另外一篇博客 使用PDFBox打印自定义纸张的PDF
如果想要读取本地pdf文件, 那就更简单了, 直接
InputStream in = new FileInputStream("d:\\cc.pdf");
PDDocument document = PDDocument.load(in);
缩放问题
不过发现打印出来的pdf文件存在缩放问题. 显得边距很大, 能跑马.
研究了下, 发现PDFPrintable可以接受是否缩放的参数.
public enum Scaling {
// 实际大小
ACTUAL_SIZE,
// 缩小
SHRINK_TO_FIT,
// 拉伸
STRETCH_TO_FIT,
// 适应
SCALE_TO_FIT; private Scaling() {
}
}
因此只要在 new PDFPrintable(document), 传入Scaling, 就不会缩放了.
Scaling.ACTUAL_SIZE
PDFBox创建并打印PDF文件, 以及缩放问题的处理.的更多相关文章
- C# 打印PDF文件之使用不同打印机打印所有页面或部分页面
C# 打印PDF文件之使用不同打印机打印所有页面或部分页面 最近在逛国外各大编程社区论坛的时候,发现很多人都在问一个关于PDF文件打印的问题:打印时如何选择非默认打印机并设置打印页面的范围.而一般情况 ...
- C#调用Python脚本打印pdf文件
介绍:通过pdf地址先将文件下载到本地,然后调用打印机打印,最后将下载的文件删除. 环境:windows系统.(windows64位) windows系统中安装python3.6.2环境 资料: O ...
- javaWeb项目springMVC框架下利用ITextpdf 工具打印PDF文件的方法(打印表单、插入图片)
方法一:打印PDF表单以及在PDF中加入图片 需要的资料: jar包:iTextAsian.jar ,itext-2.1.7.jar: 源码: public static void main(Stri ...
- (转)C# 打印PDF文件使用第三方DLL
本文为转载,原文:http://www.cnblogs.com/Yesi/p/5066835.html DLL地址:https://freepdf.codeplex.com 下面是该解决方案的详细代码 ...
- Ubuntu下命令行方式对PDF文件进行缩放、合并、拆分
安装软件: sudo aptitude install ghostscript 然后执行命令: gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibili ...
- 根据第三方库spire.pdf使用指定打印机打印pdf文件
private void button1_Click(object sender, EventArgs e) { PdfDocument doc = new PdfDocument(); string ...
- C#:MVC打印PDF文件
在百度上找了许多PDF文件打印,但是符合我需求的打印方式还没看到,所以根据看了https://www.cnblogs.com/TiestoRay/p/3380717.html的范例后,研究了一下,做出 ...
- 打印机打印pdf文件特别慢怎么解决
PDF等文件中都包含了一些或者很多光栅化数据(图片.嵌入的字体等).这些文件在打印时,打印机驱动程序都会在系统中生成大量EMF文件(增强型变换文件),小到1MB,大到500MB,过大的EMF临时文件会 ...
- python 接口测试1 --如何创建和打印日志文件
python自带的logging实在是不好用,推荐使用logbook 思路如下: 1.创建path.py文件,获取工程根路径 2.创建log.py文件,在工程根路径下创建日志文件(文件名称按日期命名) ...
随机推荐
- Java--谈一谈代理
一.代理概念 代理在我们日常生活经常听到这个名词,比如我们想看下google我们需要找个代理服务器来帮我们一下,比如我们想买一个外国的什么东西需要在代购网站或者找朋友帮忙在外国买一下,用概念一点 ...
- Air Raid
Air Raid Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- HDU Today
HDU Today Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- Branch Prediction
Pipeline的优点 现代微处理器的pipeline中包含许多阶段,粗略地可以分成fetch.decode.execution.retirement,细分开来可以分成十多甚至二十多个阶段.在处理器处 ...
- 0_Simple__simpleCallback
学习回调函数的基本概念,并在CUDA的任务流中插入基于CPU的主机函数,作为回调函数使用. ▶ 源代码:没有用到的部分被注释起来了 /*multithreading.h*/ #ifndef MULTI ...
- Log4j – Configuring Log4j 2 - Log4j 2的配置
Configuration Inserting log requests into the application code requires a fair amount of planning an ...
- POI不同版本替换Word模板时的问题
一.问题描述 通过POI,把Word中的占位符替换为实际的值,以生成复杂结构的业务报告. 在POI 3.9上,功能正常.由于某些原因升级到POI 3.10.1后,项目组反馈说Word模板出错,无法生成 ...
- struts2框架的登录制作
首先:我们要建一个web项目 接着: 我们先来导入struts的xml文件 第一步:右击你的项目名,鼠标到MyEclipse会看到一个add struts开头的文件,点开以后看到: 这里我们选择str ...
- Python之作用域
作用域测试例子: >>> a = 10 >>> def test(): ... a = 20 ... print a ... >>> a 10 & ...
- OpenCV探索之路(二十七):皮肤检测技术
好久没写博客了,因为最近都忙着赶项目和打比赛==| 好吧,今天我打算写一篇关于使用opencv做皮肤检测的技术总结.那首先列一些现在主流的皮肤检测的方法都有哪些: RGB color space Yc ...