Formflatte和文件大小减少/未引用的对象

时间:2013-08-23 07:46:01

标签: java pdf itext

我有一个关于iText在formflattening时的行为的问题,并且没有在网络上找到任何内容(或者只是未解答的问题)。这就是我的工作:

stamper.setFormFlattening(true);

结果尺寸立即从例如207kb - > 172KB。直接执行

stamper.getReader().removeUnusedObjects();

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

stamper.getReader().removeUnusedObjects();

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

1 个答案:

答案 0 :(得分:0)

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

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

iText的作者提到他将查看源代码,看看是否有办法在removeUnusedObjects的{​​{1}}方法中再次触发close(),这可能解决这个问题。