作为包含基于浏览器的可视化编辑器的项目的一部分,我使用fabric.js
创建SVG文件,然后将其转换为PDF文件。
在某些情况下,最终结果是生成的PDF文件,该文件在整个文档中出现多次相同的图像,这会导致大量不必要的文件膨胀,从而导致非常大的PDF文件。
在SVG上,可以使用单个<image>
元素轻松修复此问题,并将其与<use>
元素重复使用(在previous question中回答)。使用Inkscape将SVG转换为PDF格式并且Inkscape似乎没有“得到提示”,因为它为文档中的每一个外观重新嵌入重复的图像。
Smallpdf.com处的PDF压缩工具似乎能够解决这个问题,但我无法理解它是如何做到这一点的;我也不能使用Inkscape或我知道的任何其他工具复制此优化。
这种技术有没有名称,或者更好的方式让我自己复制这个?我读到PDF中的XObject
是适合的工具,但我不了解如何自己实现它们,也无法找到任何真实的例子。
答案 0 :(得分:1)
通常,PDF确实通过使用XObject以非常类似的方式提供与SVG相同的功能。
XObject可用于定义图像或一组图形运算符,否则这些运算符将成为页面内容的一部分。它获取名称和自己的内容流,并拥有自己的资源,使其成为独立的内容。然后可以使用&#34; Do&#34;将此XObject包含在页面内容中。运算符,与你描述的非常相似&#34;使用&#34;在SVG。
理论上,XObject可以在PDF文件中出现一次,然后在整个文档中多次使用,而不会显着增加PDF文件的文件大小。是否发生这种情况取决于PDF创建库或PDF库的优化功能。
例如,Adobe PDF库能够优化PDF文件,以便优化XObject中出现的重复内容 - 然后保留XObject的单个副本,并且页面描述中每个XObject的使用都指向该单个对象。我已经看到了在可变数据场景中文件大小从几千兆字节数据减少到小于一兆字节的示例。
要使用此功能,您需要: