【问题标题】:PDFBox - copy only the page resources instead of copying all resources of a documentPDFBox - 仅复制页面资源而不是复制文档的所有资源
【发布时间】:2013-09-19 07:26:22
【问题描述】:

使用pdfbox,如何只复制页面资源而不是复制单个页面的文档的所有资源?这是我用来提取页面并将其添加到新文档的代码,但这会创建一个大文件,我认为即使我添加一个页面,它也会复制文档的所有资源。有什么方法可以压缩内容吗?

pageToAdd = (PDPage) billDoc.getDocumentCatalog().getAllPages().get(j-1);
outputDoc.addPage(pageToAdd);

【问题讨论】:

  • 根据 PDF 创建软件的不同,其 Resources 字典中的每个页面可能会引用所有文档资源,而不仅仅是当前页面所需的资源。对于此类文档,您将看到您所描述的行为。
  • 另外,页面的“大小”不是文档大小除以页数。页面之间存在共享资源,因此单个页面的大小可能比您预期的要大。
  • 我们使用 FOP 生成 PDF,并且没有任何图像会大幅增加大小 - 只是纯文本。问题是,我有 2 个内容相同但从不同来源创建的 pdf。我用 FOP 创建的那个是我收到的那个的两倍(不确定它来自哪里)。我也没有嵌入任何字体。如果 FOP 在单个页面上引用上述所有文档资源,那么我会说 FOP 需要优化。
  • 使用 PDFBox,有没有一种方法可以拆分 PDF 中的页面,仅复制该页面所需的资源?

标签: java pdf pdfbox


【解决方案1】:

添加或拆分页面时,您只能复制所需的资源。这完全取决于您的需求或您想要完全添加/删除的内容。您还可以检查 mergeInto() 以合并 COS 字典。例如只复制字体:

PDResources res = pageToAdd.getResources();
PDResources newres = new PDResources();

newres.setFonts(res.getFonts());
pageToAdd.setResources(newres);
outputDoc.addPage(pageToAdd);

【讨论】:

    猜你喜欢
    • 2018-08-24
    • 2019-02-08
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多