如何知道 PDF 文件是否已压缩以及如何压缩(解压缩)

如何知道 PDF 文件是否已压缩以及如何压缩(解压缩)

我刚刚了解到可以压缩 PDF 文件以减小磁盘大小。

  1. 我想知道如何知道PDF文件是否已经被压缩?
  2. 哪些应用程序/命令可用于压缩或解压缩 PDF 文件?

我的环境是Linux Ubuntu 10.10。


一些尝试没有给出令人满意的结果:

  1. 以下是尝试的结果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
    

    文件的属性显示所有文件都未经过优化。

  2. 转换为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 文件可以使用 Adob​​e 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

只需检查其属性即可;它会告诉你文件是否被压缩。

相关内容