我刚刚了解到可以压缩 PDF 文件以减少其磁盘大小。
我的环境是 Linux Ubuntu 10.10。
一些尝试没有给出令人满意的结果:
以下是尝试的结果pdftk
:
$ pdftk 3.pdf output 5.pdf uncompress
$ pdftk 3.pdf output 3comp.pdf compress
$ ls -l 3.pdf 3comp.pdf 5.pdf
-rwxrwx--- 1 root plugdev 8652269 2011-07-30 12:27 3comp.pdf
-rwxrwx--- 1 root plugdev 8652319 2011-07-29 22:15 3.pdf
-rwxrwx--- 1 root plugdev 16829828 2011-07-30 12:27 5.pdf
Run Code Online (Sandbox Code Playgroud)
文件的属性表明它们都没有优化。
转换为 ps 然后返回 pdf 的结果:
$ pdf2ps 3.pdf 3.ps
$ ps2pdf 3.ps 3c.pdf
$ ls -l 3.pdf 3.ps 3c.pdf
-rwxrwx--- 1 root plugdev 8808946 2011-07-30 13:14 3c.pdf
-rwxrwx--- 1 root plugdev 8652319 2011-07-29 22:15 3.pdf
-rwxrwx--- 1 root plugdev 122375966 2011-07-30 13:14 3.ps
Run Code Online (Sandbox Code Playgroud)Phi*_*ath 39
简而言之:
要知道它是否已经压缩:
strings your.pdf | grep /Filter
要(解)压缩 PDF,请使用QPDF
qpdf --stream-data=compress your.pdf compressed.pdf
qpdf --stream-data=uncompress compressed.pdf uncompressed.pdf
Run Code Online (Sandbox Code Playgroud)
解释:
pdf 文件中的“过滤器”关键字是所用压缩方法的指示符。他们之中有一些是:
CCITT G3/G4 – 用于单色图像
JPEG – 一种用于图像的有损算法
JPEG2000 – JPEG 的更现代替代品,也用于压缩图像
Flate – 用于压缩文本和图像
JBIG2 – 替代品单色图像的 CCITT 压缩
LZW – 用于压缩文本和图像,但被 Flate
RLE取代– 用于单色图像
ZIP – 用于灰度或彩色图像
(从这里复制)。
然而,鉴于 PDF 复杂的文件结构,大多数时候 PDF 的某些部分(或“流”)已经以某种方式被压缩(并且会在 grepping /Filter 时显示)而其他部分则不会,所以对于 PDF 是否被压缩的问题,没有 YES/NO 答案。
解决这个问题的一种方法是向-c
grep添加选项,它返回出现的次数,因此您可以相对了解它的压缩程度。例如,如果strings
"large
.pdf" | grep -c /Filter
返回小于 10,则它是非常未压缩的。
另一个与 PDF 大小相关的属性是,它们是否已针对快速访问进行了优化,“优化”的 PDF 的大小更大,引用自维基百科:
PDF 文件有两种布局——非线性(非“优化”)和线性(“优化”)。非线性 PDF 文件比线性 PDF 文件消耗更少的磁盘空间,但它们的访问速度较慢,因为组装文档页面所需的部分数据分散在整个 PDF 文件中。线性 PDF 文件(也称为“优化的”或“网络优化的”PDF 文件)的构造方式使它们能够在 Web 浏览器插件中读取,而无需等待整个文件下载,因为它们以一种方式写入磁盘线性(按页面顺序)方式。PDF 文件可以使用 Adobe Acrobat 软件或 QPDF 进行优化。
您可以使用pdfinfo your.pdf
.
ulo*_*sEI 10
pdftk是一个对 PDF 文件进行一些操作的工具,比如压缩/解压:
$ pdftk test.pdf output compressed_test.pdf compress
Run Code Online (Sandbox Code Playgroud)