PDF压缩库/工具

标签 pdf compression pdf-conversion

我正在做一个项目来减少 PDF 的大小,压缩它们。我想知道市场上是否有任何非常好的工具/库(.NET)。
我确实尝试了一些像 Onstream Compression 这样的工具,但结果并不令人满意。

最佳答案

可以轻松地从 PDF 中挤出一些额外的(兆)字节。例如,是一个众所周知的 "PDF32000_2008.pdf"优化得够不够?文件大小为 8,995,189字节。它使用对象和外部参照流,(几乎)没有图像,一切都紧凑。或者不是?

看一页字典:

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 ,并且此文档中没有带有 CropBox 的页面除了 MediaBox .为什么是 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)

本文档中有数千个(可能 > 10'000?)链接注释。 /Type键是可选的,为什么在那里?它们是不可见的矩形,您认为它们除了整数点之外的放置精度是否相关?将其四舍五入为整数。

查看典型页面内容流的片段,文本显示操作符:
[(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

小于某个值的字距调整几乎是不可见的。这个值可能有争议,就像 JPEG 压缩质量级别 - 有些人可以接受,有些人不同意。我认为非常保守的估计(即保留大部分质量),对一般人来说是不可见的,绝对值小于 10 的字距调整可以省略。 (当然,必须注意保持正当性)。 (我什至没有提到有小数字距调整的文件,精度为 3-6 位小数!但不在这个文件中)

并且,通过上述优化,文件大小变为 7,982,478字节。一兆字节减少了。这当然不是限制,也许还有其他隐藏得更好的优化来源。

关于PDF压缩库/工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21341130/

相关文章:

node.js - 不将图像保存在 PDF 中,在 Node/expressJs 中出现错误

c# - 使用 ITextSharp 将 HTML 文件转换为 PDF 文件

vb.net - 如何在VB.NET或VB中压缩大型MP3文件以减小其大小和声音质量?

command-line - 7z bzip2 格式命令行错误

java - 闭包编译器选项

symfony - 通过 Symfony 组件使用 unoconv 将 DOC 转换为 PDF

command-line - Libreoffice 命令行在 Windows 7 上打开 DOCX 或转换为 PDF 时崩溃

java - 如何在 Android 中渲染 PDF

css - 如何用phantomjs创建不同的A4页面

javascript - 为什么我的计算总计在 Acrobat 中无法正确更新?