我有一个关于iText在formflattening时的行为的问题,并且没有在网络上找到任何内容(或者只是未解答的问题)。这就是我的工作:
stamper.setFormFlattening(true);
结果尺寸立即从例如207kb - > 172KB。直接执行
stamper.getReader().removeUnusedObjects();
无效。如果我在文本编辑器中打开PDF,我仍然可以在该结果文件中找到许多未引用的对象。如果我再次在“新鲜”压模中加载PDF并调用
stamper.getReader().removeUnusedObjects();
Pdf减少到99kb并且没有找到未引用的对象。 所以这是我的问题:是否可以立即(不再从文件或内存中重新读取pdf)从PDF中删除所有未引用的对象?对我而言,它似乎在第一次运行时直接将删除与字段相关的对象,但不删除这些对象的间接引用字典。
答案 0 :(得分:0)
仅供参考,以便没有人需要浏览所有这些评论:
展平会移除AcroForm条目,Annots条目,表单字段,外观和小部件,但不会非常“深入” - 例如,不删除这些表单字段引用的间接对象。如果是字体,图像(...)仍然被其他对象引用,但是如果间接对象(实际上)不再被引用,它也将保留在pdf中。在同一个实例上调用removeUnusedObjects
无济于事。
iText的作者提到他将查看源代码,看看是否有办法在removeUnusedObjects
的{{1}}方法中再次触发close()
,这可能解决这个问题。