0

我有一个关于 iText 在 formflattening 时的行为的问题,并且在网络上没有找到任何东西(或者只是未回答的问题)。这就是我所做的:

stamper.setFormFlattening(true);

生成的大小立即从例如 207kb -> 172kb 减小。直接执行

stamper.getReader().removeUnusedObjects();

没有效果。如果我在文本编辑器中打开 PDF,我仍然可以在该结果文件中找到许多未引用的对象。如果我然后在“新”压模中再次加载 PDF 并调用

stamper.getReader().removeUnusedObjects();

Pdf 减少到 99kb,并且找不到未引用的对象。所以这是我的问题:是否可以立即(无需从文件或内存中重新读取 pdf)从 PDF 中删除所有未引用的对象?对我来说,似乎在第一次运行中,所有直接与字段相关的对象都被删除了,但这些对象的间接引用字典没有被删除。

4

1 回答 1

0

仅供参考,以便没有人需要浏览所有这些评论:

展平会删除 AcroForm 条目、注释条目、表单字段、外观和小部件,但不会非常“深入” - 例如,这些表单字段引用的间接对象不会被删除。如果这些字体、图像(...)仍然被其他重要的对象引用,但是如果间接对象(真的)不再被引用,它也将保留在 pdf 中。在同一个实例上调用removeUnusedObjects没有帮助。

iText的作者提到他会看一下源代码,看看是否有办法removeUnusedObjectsclose()方法中再次触发PdfStamperImp,这可以解决这个问题。

于 2013-08-26T08:39:40.213 回答