我正在使用一种工具,可以根据模板文件和其他源数据自动生成PDF文件。我正在使用Mac OS 10.14.4,Java 1.8和PDFBox版本2.0.15。
作为一项基本测试,我将打开和保存的代码缩减为两行,这对于一个特定的PDF来说显然有问题,而对于我尝试过的所有其他PDF来说,它们都有更细微的问题:
PDDocument targetPDF = PDDocument.load(new File(templatePath));
targetPDF.save(targetFileName)
对于一个特定的PDF ,观察到的问题是在第一页的顶部插入了意外的字符。 (它们似乎是没有使用的字母,并且会被剪切。)其他PDF在外观上相似,但是当我通过diff
运行它们时却有很大不同。保存文件是否应该做一些棘手的事情?那一个文件有问题吗? PDFBox是否正在做某些奇怪的事情?
我一直在寻找类似的报告,并发现一些与输出文件大小有关的报告:In PDFBox, why does file size becomes extremely large after saving?和Split and merge pdf files using PDFBOX produces large file我确实看到文件大小显着增加,但没有就像那些问题报告的一样。在 one 情况下,输入和输出文件在视觉上是不同的。在其他情况下,diff -y --text template.pdf target.pdf
报告了很大的差异,但仅靠肉眼我看不到任何差异。 (在Mac的内置“预览”文档查看器中。损坏的“ template.pdf”是在Adobe Acrobat中创建的。我不知道不损坏的文件。)
在与https://issues.apache.org/jira/browse/PDFBOX-2690和http://useof.org/java-open-source/org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject比较之后,我尝试在targetPDF.close()
之后添加targetPDF.save()
,但这没什么区别。
https://pdfbox.apache.org/2.0/faq.html似乎建议在保存文件之前关闭内容 流,但是我不知道该怎么做。 (File
本身没有close()
方法。PDDocument上的所有方法似乎都不与流或关闭流有关,只有PDDocument.close()
本身可以防止保存。)
我会在此处粘贴一些日志文件,但是我没有从PDFBox类中获取任何日志消息。...