我刚刚了解到可以压缩 PDF 文件以减小磁盘大小。
- 我想知道如何知道PDF文件是否已经被压缩?
- 哪些应用程序/命令可用于压缩或解压缩 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
文件的属性显示所有文件都未经过优化。
转换为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
答案1
简而言之:
要知道它是否已经被压缩:
strings your.pdf | grep /Filter
要(解压缩)PDF,请使用量子PDF
qpdf --stream-data=compress your.pdf compressed.pdf
qpdf --stream-data=uncompress compressed.pdf uncompressed.pdf
解释:
pdf 文件中的“Filter”关键字指示所使用的压缩方法。他们之中有一些是:
CCITT G3/G4 – 用于单色图像
JPEG – 一种用于图像的有损算法
JPEG2000 – JPEG 的更现代替代方案,也用于压缩图像
Flate – 用于压缩文本和图像
JBIG2 – JPEG 的替代方案用于单色图像的 CCITT 压缩
LZW – 用于压缩文本和图像,但被 Flate 取代
RLE – 用于单色图像
ZIP – 用于灰度或彩色图像
(复制自这里)。
然而,考虑到 PDF 复杂的文件结构,大多数时候 PDF 的某些部分(或“流”)已经以某种方式被压缩(并且在 grep /Filter 时会显示),而其他部分则不会,所以对于 PDF 是否被压缩的问题,没有“是”/“否”的答案。
解决这个问题的一种方法是将选项添加-c
到 grep,它返回出现的次数,这样你就可以看到相对地它的压缩程度如何。例如,如果strings
"large
.pdf" | grep -c /Filter
返回小于 10 它是相当未压缩的。
与 PDF 大小相关的另一个属性是它们是否针对快速访问进行了优化,“优化”PDF 的大小更大,引用自维基百科:
PDF 文件有两种布局 - 非线性(非“优化”)和线性(“优化”)。非线性 PDF 文件比线性 PDF 文件消耗更少的磁盘空间,但访问速度较慢,因为组合文档页面所需的部分数据分散在整个 PDF 文件中。线性 PDF 文件(也称为“优化”或“Web 优化”PDF 文件)的构建方式使它们能够在 Web 浏览器插件中读取,而无需等待整个文件下载,因为它们以线性(如页面顺序)方式。 PDF 文件可以使用 Adobe Acrobat 软件或 QPDF 进行优化。
您可以使用 检查 PDF 是否经过优化pdfinfo your.pdf
。
答案2
pdftk是一个对 PDF 文件执行一些操作的工具,例如压缩/解压缩:
$ pdftk test.pdf output compressed_test.pdf compress
答案3
我在pdf文件中找到了压缩方法。使用文本编辑器打开 PDF。运行搜索或查找 - 如果未找到,请输入 CCITT,然后输入 JPEG、Flate、JBIG2、LZW、RLE、ZIP。
听起来比实际情况更糟糕!很容易找到数据流的压缩方法。
答案4
只需检查其属性即可;它会告诉你文件是否被压缩。