pdftk压缩选项


93

我使用pdftk使用以下命令行压缩pdf

pdftk file1.pdf output file2.pdf compress

它随着我文件重量的减少而起作用。

是否有[选项]来更改压缩率???

或者也许其他解决方案来压缩我的文件?这很重,因为某些图形有很多要点。有没有一种方法可以将这些图形转换为例如jpg并调整压缩率?


1
根据我的经验,这取决于您的pdf内容。例如,如果它是一个具有许多点的图形,最好的解决方案是将图形转换为png并将此png包含到pdf中。
RockScience 2012年

Answers:


122

我遇到了同样的问题,找到了两个不同的解决方案(有关更多详细信息,请参见此线程)。两者都大大减少了我未压缩的PDF的大小。

  • 像素化(有损):

    convert input.pdf -compress Zip output.pdf
    
  • 无像素(无损,但显示可能略有不同):

    gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH  -dQUIET -sOutputFile=output.pdf input.pdf
    

编辑:我刚刚发现了另一个选项(无损压缩),它避免了讨厌的gs命令。qpdf是一种精巧的工具,可以转换PDF(压缩/解压缩,加密/解密),并且比gs命令快得多:

qpdf --linearize input.pdf output.pdf

3
太棒了 gs为我工作,将4MB文件转换为339K。质量下降了,但足以达到我的目的。
Sridhar Sarnobat,2012年

27
您可以使用“打印机” PDF设置以获得更好的质量:gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
鸢尾花

10
要调整质量(并因此调整大小),请更改PDFSETTINGS值。参见ghostscript.com/doc/current/Ps2pdf.htm#Options
1in9ui5t 2013年

6
请注意,gs答案中的命令并非完全无损,因为它会降低嵌入式JPG的分辨率和质量。但这是无损的。文本,将其保留为文本,而convert命令将其转换为光栅图形。
tanius

13
设置选项-dPDFSETTINGS=,以/ebook给人一种很不错的输出,我:当然,它的压缩和一些JPG文物是可见的,但它是一个合理的规模完全可读。谢谢!
2015年

35

这个程序运作良好

pdf2ps large.pdf very_large.ps

ps2pdf very_large.ps small.pdf

试试看。


8
这不是一般的解决方案。在许多情况下,生成的pdf更大。
rotskoff 2012年

4
这对我来说是所有提到的解决方案中效果最好的。一些大图像从23MB减少到1.4MB,质量损失最小。
AerandiR 2013年

1
@rotskoff可能没有通用的解决方案,因为存在不同类型的文档。但是我明白你的意思。拥有软件来确定最适合我们的软件会很好。
tiktak 2013年

谢谢,这对我有用,而qpdf和gs并没有减小输出文件的大小。
sebastian 2014年

1
如前所述这里的另一个缺点这种方法是,它会破坏里面的文件URL链接。
ptomato

29

尝试使用tiff2pdfZip / Deflate压缩来压缩我用400ppi的tiff(大多数为8位,少数24位)和PackBits压缩制成的PDF 。这些方法中的每一种都存在一个问题:以上方法都没有保留我在Acrobat Pro X中精心创建的书签TOC。甚至没有推荐的ebook设置gs。当然,我可以打开原样并保持原样的副本,Replace pages但是不幸的是,这些方法都没有令人满意的开始。他们要么减小了尺寸,以至于质量被不可接受的像素化,要么根本没有减小尺寸,在一种情况下,尽管质量下降了,但实际上却增大了尺寸。

pdftk compress

no change in size
bookmarks TOC are gone

gs screen

takes a ridiculously long time and 100% CPU
errors:
    sfopen: gs_parse_file_name failed.                                 ? 
    | ./base/gsicc_manage.c:1651: gsicc_set_device_profile(): cannot find device profile
74.8MB-->10.2MB hideously pixellated
bookmarks TOC are gone

gs printer

takes a ridiculously long time and 100% CPU
no errors
74.8MB-->66.1MB
light blue background on pages 1-4
bookmarks TOC are gone

gs ebook

errors:
    sfopen: gs_parse_file_name failed.
      ./base/gsicc_manage.c:1050: gsicc_open_search(): Could not find default_rgb.ic 
    | ./base/gsicc_manage.c:1651: gsicc_set_device_profile(): cannot find device profile
74.8MB-->32.2MB
badly pixellated
bookmarks TOC are gone

qpdf --linearize

very fast, a few seconds
no size change
bookmarks TOC are gone

pdf2ps

took very long time
output_pdf2ps.ps 74.8MB-->331.6MB

ps2pdf

pretty fast
74.8MB-->79MB
very slightly degraded with sl. bluish background
bookmarks TOC are gone

1
这是一项非常有价值的研究(谢谢!),但它并不是一个答案,以至于我暂时考虑了否决权。
ndemou

3
怎么不是答案?
hmj6jmh

21

如果文件大小仍然太大,则可以使用ps2pdf降低生成的pdf文件的分辨率:

pdf2ps input.pdf tmp.ps
ps2pdf -dPDFSETTINGS=/screen -dDownsampleColorImages=true -dColorImageResolution=200 -dColorImageDownsampleType=/Bicubic tmp.ps output.pdf

调整-dColorImageResolution选项的值以获得符合您需要的结果(该值描述了DPI中的图像分辨率)。如果您的输入文件是灰度的,则通过灰色替换颜色或使用上述命令中的两个选项也可能会有所帮助。通过将-dPDFSETTINGS选项更改为/ default/ printer,可以进行进一步的微调。有关所有可能选项的说明,请参考ps2pdf手册


感谢小费。使用-dPDFSETTINGS,我可以减小扫描的PDF的大小
eshwar

1
谢谢。我不认为每个人的用例都有一个通用的解决方案-但是我在该线程上尝试了几乎所有解决方案,这是唯一对我有用的解决方案!!!能够“调整” dColorImageResolution参数是关键-必须使文档大小足够小,以使该政府站点可以接受它,但必须足够大,以便于阅读。谢谢,山姆大叔,再次经历了又一番痛苦:)
Michael Klear

3

在按照nullglob的建议尝试gpdf之后,我发现仅使用cups-pdf打印机就可以得到相同的压缩结果(约900mb的文件降至约30mb)。如果您已经在查看文档,而只需要压缩一个或两个文档,则可能更容易/首选。

在Ubuntu 12.04中,您可以通过以下方式安装

sudo apt-get install cups-pdf

安装后,请确保签入系统工具 > 管理 > 打印 >右键单击“ PDF”并将其设置为“启用”

默认情况下,输出将保存到主目录中名为PDF的文件夹中。


3

单行pdf2ps选项(由Lee提供)实际上增加了pdf大小。但是,这两个步骤之一做得更好。可以使用从&到标准输入/输出和管道的重定向将其合并为一个:

pdf2ps大.pdf-| ps2pdf-small.pdf

确实将xsane生成的PDF从18 Mo减少到630 ko!

链接丢失了,但是对于本示例来说,这不是问题……这是获得所需结果的最简单方法。


您可以试试看ps2pdf,请参阅对@Lee答案的评论
myrdd

2

pdf2ps large.pdf small.pdf 只需两个步骤就足够了

pdf2ps large.pdf very_large.ps 
ps2pdf very_large.ps small.pdf

但是,ps2pdf large.pdf small.pdf是更好的选择。

  • ps2pdf 快得多
  • 如果未指定其他参数,则pdf2ps有时会产生较大的文件。

您在哪里找到此选项?它是某些最新版本中的功能吗?它对我没有用。虽然我命名输出文件out.pdf,它成为了一个PS文件(mimetype out.pdfout.pdf: application/postscript)。
myrdd

我的是最新的版本9.xx。不确定你的。

我使用的是debian稳定版(“拉伸”)打包版本,即9.25。您可以通过输入检查是否确实有pdf文件mimetype small.pdf吗?
myrdd

的输出mimetype small.pdfsmall.pdf: application/pdf。我认为程序可以根据后缀自动确定文件类型。

1
@myrdd是的,我进行了测试。ps2pdf更好。

1

使用qpdf时,文件大小没有减少很多。我发现的最好方法是在完成pdftk之后,使用ghostscript将pdf转换为postscript,然后再转换回pdf。在PHP中,您将使用exec:

$ps = $save_path.'/psfile.ps';
exec('ps2ps2 ' . $pdf . ' ' . $ps);
unlink($pdf);
exec('ps2pdf ' .$ps . ' ' . $pdf);
unlink($ps);

几分钟前,我用它来将pdftk输出从490k提升到71k。


PHP添加了完全不必要的复杂性,并缩小了此答案的适用范围
ndemou

-2

我遇到了同样的问题,并且使用此功能压缩了单个页面,这导致文件大小最多被压缩为原始大小的1/3。

for (int i = 1; i <= theDoc.PageCount; i++)
{
       theDoc.PageNumber = i;
       theDoc.Flatten();
}

您在使用pdftk的C ++库吗?
RockScience 2012年

-2

如果要压缩包含大量可选文本的PDF,则在Windows上可以使用NicePDF Compressor-选择“ Flate”选项。在尝试了所有内容(cpdf,pdftk,gs)之后,它最终帮助我将我的1360页PDF从500 MB压缩到10 MB。

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.