首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iText不为/Pages文档从/Pages复制资源字典

iText不为/Pages文档从/Pages复制资源字典
EN

Stack Overflow用户
提问于 2016-09-09 16:51:00
回答 1查看 987关注 0票数 2

我有一个Pdf格式,它将字体存储在文档的/Resources字典中,以便在每个页面上重新使用它们。这似乎实现了两件事:当然,正确的显示,但也较小的文件大小。当使用iText从这个Pdf复制页面时,我注意到,不管使用更高级别或更低级别的函数(比如PdfPage的copyTo或copyFormAsXObject),最终的Pdf都没有这个特性--而是将参考资料存储在每个单独的页面上。

在做页面复制时,有什么特别的原因没有坚持吗?

此外,我自己也尝试过这样做,但似乎没有任何方法将参考资料放在文档的页面上。我可以在PdfPages上使用PdfPages方法对单个页面执行此操作,但是对于PdfDocument,似乎没有类似的方法。有什么方法可以用这个结构使用PdfDocument来创建iText呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-13 09:11:48

你不需要担心你的PDF会膨胀。资源作为间接对象添加到资源字典中。这意味着资源字典将保持对实际资源对象的引用,并且不需要将其嵌入到字典中。以下是PDF的/Pages条目:

代码语言:javascript
复制
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来解决这一问题:

代码语言:javascript
复制
pdfWriter.setSmartMode();

我们将研究为什么iText不复制继承。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39416336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档