当前位置: 首页 > 知识库问答 >
问题:

iText不会从PDF文档的/页复制资源字典

慕容铭
2023-03-14

我有一个Pdf,它的字体存储在 /Resources字典中,在文档的 /Pages级别,以便它们在每一页都可以重复使用。这似乎实现了两件事情:当然正确的显示,但也较小的文件大小。当使用iText从这个Pdf复制页面时,我注意到,无论使用更高级别或更低级别的函数(如PdfPage的复制到或复制到AsXObject),所得到的Pdf都没有这个特性——资源而是存储在每个单独的页面上。

在进行页面复制时,没有坚持这一点有什么特殊的原因吗?

此外,我试图自己这样做,但似乎没有任何方法可以将参考资料放在文档的页面上。我可以使用PdfPages上的. put方法对单个页面执行此操作,但是,对于PdfDocents,似乎没有等效的方法。有没有一种方法可以使用iText创建一个具有此结构的Pdf文档?

共有1个答案

商嘉木
2023-03-14

你不必担心你的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中的内容增加了膨胀。

您可以通过在智能模式下运行PdfWriter在iText中解决这个问题:

pdfWriter.setSmartMode();

我们将研究iText不复制继承的原因。

 类似资料:
  • 我使用BIRT报告创建了一个PDF,每个数据页的标题中都包含一个表。现在我使用IText将目录添加到PDF报告中。有没有办法使用IText将标题从数据页复制到TOC页?

  • 问题内容: 我创建了自己的build.xml,其中包含: 效果很好。当我调用ant run时,它会编译并运行我的应用程序,但是我的应用程序带有图标包,并且不会移动到“ build”文件夹,因此我的应用程序以无法找到我的图标的异常结束。当我自己移动它们时,它将起作用。 我尝试使用 它可以工作,但是我想不使用copy命令。javac是否有任何参数?或者是其他东西? 谢谢你的答案。 问题答案: 抱歉,您

  • 我正在尝试将多个pdf页面合并为一个pdf页面。有很多iText的例子展示了如何将pdf页面合并到一个文件中,但是我需要所有的页面都放在一个页面中(一路上缩小它们的宽度和高度) 编辑:尝试从这里这个代码,但它只是合并成一个文件的pdf页面,我需要他们收缩成一个单一的页面

  • 我在用iText7做游戏。净c#。我正在尝试在内存中创建一个多页PDF文档(n页数),其中源PDF文档只包含一页。 我可以用一页创建一个新文档,但无法根据需要创建额外的页面。我试过了 但我得到了一个ArgumentOutOfRange例外。。。索引超出范围。。。等 我试图关闭destPdfDoc,然后重新打开它,认为第二页直到我关闭它才被写入。但是当第二次打开destPdfDoc时,它没有页面。我

  • 想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。 我有一个PDF文档,有两页。我需要阅读此文档的第一页,并使用阅读内容创建一个新的PDF文档。我将如何使用iText执行此操作?到目前为止,我无法尝试任何事情,因为我真的不知道如何开始。最好的方法是什么?

  • 我在android和iText上遇到了一些问题,如果有人能帮忙的话。 android应用程序编写多个页面,每个页面包含不同的表。我没有允许一个表跨越一个页面,而是为每个页面添加一个表,并为下一个页面创建一个新表。这样我就可以控制页面总数、页眉和页脚。 我的问题是Android adobe pdf阅读器显示文档很好,正是我正在寻找的。但是,当我在PC上打开一个窗口以访问平板电脑上的 /mnt/sdc