我正在开展一个项目,旨在减小PDF文件的大小,压缩它们。我想知道市场上是否有一些非常好的工具/库(.NET),可以提供令人满意的结果。
我尝试过一些工具,比如Onstream Compression,但结果并不令人满意。
我正在开展一个项目,旨在减小PDF文件的大小,压缩它们。我想知道市场上是否有一些非常好的工具/库(.NET),可以提供令人满意的结果。
我尝试过一些工具,比如Onstream Compression,但结果并不令人满意。
一些额外的(巨型)字节可以很容易地从PDF中挤出来。例如,众所周知的"PDF32000_2008.pdf"是否已经优化到足够的程度?文件大小为8,995,189
字节。它使用对象和xref流,(几乎)没有图像,所有内容都紧密压缩。或者它还不够优化?
看看页面词典:
Dict:9 [1 0 R]
. /Annots Array:3
. /Contents Stream:3 [2 0 R]
. /CropBox Array:4
. /MediaBox Array:4
. /Parent Dict:4 [124248 0 R]
. /Resources Dict:4
. /Rotate 0 (Number)
. /StructParents 2 (Number)
. /Type Page (Name)
Rotate 0
是默认值,它为什么存在?CropBox
是用来做什么的?它默认是 MediaBox
,而且文档中除了 MediaBox
外没有带有 CropBox
的页面。那么 MediaBox
为什么存在呢?因为它可以被继承,所有页面大小都相同,所以将其移动到页面树根!这份文档共有 756 页,也就是冗余(或无用)信息被复制了 756 次。
请看典型的注释字典:
Dict:6 [3548 0 R]
. /A Dict:2
. . /S URI (Name)
. . /URI http://www.iso.org/iso/iso_catalogue/... (String)
. /Border Array:3
. . [0] 0 (Number)
. . [1] 0 (Number)
. . [2] 0 (Number)
. /Rect Array:4
. . [0] 82.14 (Number)
. . [1] 576.8 (Number)
. . [2] 137.1 (Number)
. . [3] 587.18 (Number)
. /StructParent 3 (Number)
. /Subtype Link (Name)
. /Type Annot (Name)
[(w)7(ed)-6( b)21(u)1(t shal)-6(l no)-6(t b)-6(e)1( ed)-6(ite)-6(d)1( un)-6(less the typef)23(aces wh)-6(ich )]TJ
@Jongware是正确的。如果一个PDF文件被正确创建,那么它的大小不太可能被显著减小。
但是很多PDF文件在网上可以更好地压缩。这是因为许多PDF文件没有使用较新版本PDF规范中引入的对象和交叉引用流。此外,PDF文件通常包含可以安全删除的未使用对象。是的,PDF中的图像可以调整大小/重新压缩以进一步减少PDF的大小。
如果您接受商业解决方案,那么您可能会对我对类似问题的回答感兴趣。该答案包含了使用Docotic.Pdf库如何压缩PDF的代码(我是该库的开发人员之一)。
有一个名为PDFBeads的Ruby宝石。
它适用于带有DevKit的RubyInstaller 2.3.3 32位。(更高版本需要过大的MSYS2 DevKit。)
对于Windows,这些程序是必需的:
需要单独安装iconv gem。
gem install iconv -- --with-iconv-include="<path>" --with-iconv-lib="<path>"
(适用于简单、短路径)