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


18

我刚刚了解到可以压缩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
    

由于手头没有压缩的PDF,我现在无法测试file。它应该显示文件是否已压缩。
polemon 2011年

1
@polemon:谢谢!没有。的结果$file 3.pdf3.pdf: PDF document, version 1.4
StackExchange所有

请注意,可以压缩PDF文件中的各个流。因此,询问“整个PDF文件是否已压缩”是一个错误的问题(尽管在许多情况下,全部或大多数流将被压缩或未压缩)。
dirkt

Answers:


30

简而言之:

要知道它是否已经被压缩:

strings your.pdf | grep /Filter

要(解压缩)PDF,请使用QPDF

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 –用于替代图像黑白图像的CCITT压缩
LZW –用于压缩文本和图像,但已由Flate
RLE 取代–用于单色图像
ZIP –用于灰度或彩色图像

(从这里复制)。

但是,在给定PDF复杂的文件结构的情况下,大多数情况下,PDF的某些部分(或“流”)将已经以某种方式进行压缩(并在grepping / Filter时显示),而其他部分则不会。对于是否压缩PDF,没有YES / NO答案。
解决此问题的一种方法是在-cgrep中添加选项,该选项返回出现的次数,因此您可以相对地看到其压缩程度。例如,如果返回的值小于10,则表示未压缩。strings "large.pdf" | grep -c /Filter

与pdf大小有关的另一个属性是,是否已针对快速访问对其进行了优化,而“优化”的PDF的大小更大,引自维基百科

PDF文件有两种布局-非线性(未“优化”)和线性(“优化”)。非线性PDF文件比线性线性文件占用更少的磁盘空间,尽管它们的访问速度较慢,因为组合文档页面所需的部分数据分散在整个PDF文件中。线性PDF文件(也称为“优化的”或“网络优化的” PDF文件)的构造方式使它们可以在Web浏览器插件中读取,而无需等待整个文件下载,因为它们被写入磁盘中。线性(按页面顺序)方式。可以使用Adobe Acrobat软件或QPDF对PDF文件进行优化。

您可以使用来检查PDF是否已优化pdfinfo your.pdf


谢谢!(1)使用qpdf的结果类似于使用pdftk:使用compress时,大小实际上变大了(奇怪),而使用非压缩时,大小变得更大了,几乎翻了一番。(2)pdftk和gpdf是否尝试使用compress和uncompress选项完成相同的工作?
StackExchange为所有

@Tim :(对不起,我不在这里)。正如我所解释的,对于(1),PDF已经被部分压缩了(很可能),这就是为什么压缩不会节省太多的原因(而解压缩会使它更大,因为它会解压缩所有压缩的流)。(2)最有可能qpdfpdftk做更多或更少相同的关于压缩的事情,但qpdf可以优化太(以及许多其他的东西)。
Philomath

10

pdftk是对PDF文件执行某些操作的工具,例如压缩/解压缩:

$ pdftk test.pdf output compressed_test.pdf compress

谢谢!我想知道如何压缩pdf文件?
全部

1
@Tim:pdfinfo file.pdf告诉您PDF是否已优化。但是,我不确定这是否意味着压缩
nico

1
@uloBasEI:我尝试使用pdftk进行压缩,但是大小几乎没有变化。如果解压缩,文件大小将增加一倍。原始文件,压缩文件和未压缩文件的属性均显示它们未优化。
全部

@nico:谢谢!请参阅上面的评论和更新。压缩和优化似乎并不意味着彼此吗?
全部


1

我在pdf文件中找到了压缩方法。使用文本编辑器打开PDF。运行“搜索”或“查找-输入CCITT”(如果未找到),输入JPEG,然后输入Flate,然后输入JBIG2,然后输入LZW,然后输入RLE,然后输入ZIP。
听起来比实际更糟!非常容易找到数据流的压缩方法。


这真是无聊。我使用您的方法使用以下方法检查了未压缩的PDF(由qpdf压缩) grepgrep -E“(CCITT | JPEG | Flate | LZW | RLE | ZIP)” uncompressed.pdf一样,它返回此消息Binary file uncompressed.pdf火柴。看起来它检测到uncompressed.pdf文件同时包含LZW和RLE模式。
user91822 '19

-1

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


我认为海蒂的问题是用什么程序检查属性,尤其是使用基于脚本的命令行程序。
卡莱布

>只需检查其属性-不过,哪个[开源]程序可以使用它来做?
Maxim
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.