我正在尝试将各种 PDF 拆分在一起。它们的文字不多,偶尔会有图像。举例来说,我有两个 PDF,1.4Mb 和 740kb - 当我将它们合并时,它们会膨胀到 6Mb!
我尝试过脚本化组合和手动附加,结果相同,所以我猜测这是一个根本问题。对为什么会发生这种情况的一些解释会很有用,这样我就可以寻找避免这种情况的方法。是不是颜色模型不匹配?他们的字体很小。
您没有告诉我们您如何组合 PDF,这使得您的问题相当理论化,所以我将给您一个理论上的答案:
Part 1
- 假设您有一个 10 页、总大小为 1200 KByte 的 PDF 文件。
- 假设每个页面的内容流大约由 100 KByte 组成。从该内容流中,可以引用共享资源。
- 假设这 10 个页面共享 200 KByte 的资源:它们共享相同的字体、相同的图像等。
如果您将此 PDF“分解”为 10 个单独的单页 PDF,则每个 PDF 将包含大约 300 KByte:内容流中的 100 KByte + 资源中的 200 KByte(我忽略了拥有 10 个单独的外部参照表和文件预告片的开销)。
- 如果您将这 10 个独立的单页 PDF 合并起来,就好像这 10 个 PDF 没有任何共同点一样,则总文件大小将为 10 x 300 KByte。即 3000 KByte,是原始 1200 KByte 的两倍多。
- 如果您将这 10 个单独的单页 PDF 合并在一起,并考虑到它们具有共同的资源(字体、资源等),则总大小将为 (10 x 100 KByte) + 200 KByte。
如果您使用 iText 合并 PDF,则使用PdfCopy
将生成 3000 KByte PDF,因为PdfCopy
只是尽可能快地复制文档,而不查看文档的内容。如果您想要 1200 KByte PDF,那么您需要使用PdfSmartCopy
在这种情况下,您将需要更多内存和 CPU,因为 iText 将检查每个 PDF 并重用原本多余的对象。
Part 2
在您的问题中,您提到您有一个 1.4Mb 和一个 740kb PDF,并且 1.4Mb + 740kb 会产生 6Mb 的 PDF。我的理论示例的第一部分没有解释尺寸的极端增长,所以这是第二部分。
- 在 PDF 1.0 中,PDF 语法没有被压缩。
- 从 PDF 1.2 开始,流被压缩,但间接对象和交叉引用流以 ASCII 存储。
- 从 PDF 1.5 开始,可以在对象流中压缩一系列对象,并且也可以压缩交叉引用表。
假设您的原始 PDF 具有压缩的对象流和压缩的交叉引用表。假设您将这些 PDF 合并为一个更像 PDF 1.4 文档的 PDF。在这种情况下,压缩对象和压缩交叉引用流将不再被压缩,从而导致文件大小变得更大。
Part 3?
可能还有其他原因,具体取决于原始 PDF 的性质以及您用于合并 PDF 的工具。如果上述情况都不适用,您应该澄清。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)