我有一个Pdf格式,它将字体存储在文档的/Resources字典中,以便在每个页面上重新使用它们。这似乎实现了两件事:当然,正确的显示,但也较小的文件大小。当使用iText从这个Pdf复制页面时,我注意到,不管使用更高级别或更低级别的函数(比如PdfPage的copyTo或copyFormAsXObject),最终的Pdf都没有这个特性--而是将参考资料存储在每个单独的页面上。
在做页面复制时,有什么特别的原因没有坚持吗?
此外,我自己也尝试过这样做,但似乎没有任何方法将参考资料放在文档的页面上。我可以在PdfPages上使用PdfPages方法对单个页面执行此操作,但是对于PdfDocument,似乎没有类似的方法。有什么方法可以用这个结构使用PdfDocument来创建iText呢?
发布于 2016-09-13 09:11:48
你不需要担心你的PDF会膨胀。资源作为间接对象添加到资源字典中。这意味着资源字典将保持对实际资源对象的引用,并且不需要将其嵌入到字典中。以下是PDF的/Pages条目:
3 0 obj
<<
/Type /Pages
/Count 3
/Kids [5 0 R 13 0 R 23 0 R ]
/Resources <<
/Font <<
/FAAAAH 7 0 R
/FAAABG 16 0 R
>>
/ExtGState <<
/GS1 15 0 R
/GS2 21 0 R
/GS3 25 0 R
>>
>>
>>"/FAAAAH 7 0 R“行意味着字体FAAAAH是对象#7。如您所见,资源字典只保留对字体对象的引用(7 0 R)。实际的字体对象驻留在PDF中的其他地方。每个PDF阅读器和解析器都知道如何访问对象# 7。
如果您在复制或合并时遇到了膨胀,那么PDF可能会包含两次字体,而不是只有一次,并且有两个引用。/Resources的位置与文件的膨胀没有任何关系,它是在PDF中增加了膨胀。
您可以在iText中通过在智能模式下运行PdfWriter来解决这一问题:
pdfWriter.setSmartMode();我们将研究为什么iText不复制继承。
https://stackoverflow.com/questions/39416336
复制相似问题