【问题标题】:Reusing graphical assets in PDF files重用 PDF 文件中的图形资源
【发布时间】:2016-04-03 07:29:15
【问题描述】:

作为包含基于浏览器的可视化编辑器的项目的一部分,我使用fabric.js 创建 SVG 文件,然后将其转换为 PDF 文件。

在某些情况下,最终结果是生成的 PDF 文件在整个文档中多次出现相同的图像,这会导致大量且不必要的文件膨胀,从而导致 PDF 文件非常大。

在 SVG 上,这可以通过使用单个 <image> 元素并与 <use> 元素重复使用来轻松解决(正如我的 previous question 中所回答的那样)。使用 Inkscape 将 SVG 转换为 PDF 格式,而 Inkscape 似乎没有“得到提示”,因为它为文档中的每一个外观重新嵌入了重复的图像。

Smallpdf.com 的 PDF 压缩工具似乎能够解决这个问题,但我不明白它究竟是如何做到的;我也无法使用 Inkscape 或我知道的任何其他工具复制此优化。

是否有这种技术的名称,或者更好的方法让我自己复制它?我读到 PDF 中的 XObjects 是合适的工具,但我不明白如何自己实现它们,也找不到任何真实的例子。

【问题讨论】:

  • 您有这方面的示例 PDF 文档吗?我将添加一个通用答案来解释它如何与 PDF 中的 XObjects 一起使用(类似于 SVG),但要知道这是否适用于您的文件,需要查看文件的实际创建方式。
  • @DavidvanDriessche 谢谢,我会尽快准备并发布一个示例。

标签: pdf pdf-generation inkscape


【解决方案1】:

总的来说,PDF 确实通过使用 XObjects 以非常相似的方式提供了与 SVG 相同的功能。

XObject 可用于定义图像或一组图形运算符,否则它们将成为页面内容的一部分。它有一个名称和自己的内容流,并拥有自己的资源,使其成为独立的内容。然后可以使用“Do”运算符将此 XObject 包含在页面内容中,这与您在 SVG 中使用“use”描述的内容非常相似。

理论上,XObject 可以在 PDF 文件中出现一次,然后在整个文档中多次使用,而不会显着增加 PDF 文件的文件大小。这是否发生取决于 PDF 创建库或 PDF 库的优化功能。

例如,Adobe PDF 库能够优化 PDF 文件,以便优化 XObjects 中出现的重复内容 - 然后保留 XObject 的单个副本,并且在页面描述中对该 XObject 的每次使用都引用该单个对象.我已经看到在可变数据场景中文件大小从数 GB 的数据减少到不到 1 MB 的示例。

为了使用它,你需要:

  • 重复内容实际上包含在 XObject 中的 PDF 文件
  • 能够正确创建或足够聪明地优化 PDF 文件以利用此优势的 PDF 生成器或处理器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 2015-04-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-24
    相关资源
    最近更新 更多