106

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

pdftk file1.pdf output file2.pdf compress

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

有[选项]来改变压缩吗???

或者也许其他解决方案来压缩我的文件?它很重,因为有些图形有很多点。有没有办法将这些图表转换为 jpg 并调整压缩?

4

12 回答 12

130

我遇到了同样的问题,并找到了两种不同的解决方案(有关更多详细信息,请参阅此线程)。两者都大大减少了我未压缩的 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
于 2011-05-02T12:56:19.843 回答
38

尝试压缩我用 400ppi tiffs 制作的 PDF,主要是 8 位,少数 24 位,使用 PackBits 压缩,使用tiff2pdfZip/Deflate 压缩。我在使用这些方法中的每一种时都遇到了一个问题:上述方法都没有保留我在 Acrobat Pro X 中煞费苦心地手动创建的书签 TOC。甚至没有推荐ebookgs. 当然,我可以打开一份完整的 TOC 的原件副本并执行一项操作,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
于 2014-09-07T22:22:21.097 回答
36

这个程序效果很好

pdf2ps large.pdf very_large.ps

ps2pdf very_large.ps small.pdf

试试看。

于 2012-03-25T21:38:46.547 回答
30

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

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

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

于 2015-02-17T13:28:09.147 回答
6

pdf2ps large.pdf small.pdf就足够了,而不是两个步骤

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

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

  • ps2pdf快得多
  • 如果没有指定额外的参数,pdf2ps有时会产生更大的文件。
于 2018-05-08T15:26:59.653 回答
4

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

pdf2ps large.pdf - | ps2pdf - small.pdf

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

链接丢失了,但对于本示例,这不是问题......并且是实现所需结果的最简单方法。

于 2018-07-04T21:01:12.400 回答
3

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

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

sudo apt-get install cups-pdf

安装后,请务必检查系统工具>管理>打印>右键单击“PDF”并将其设置为“启用”

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

于 2012-11-07T17:17:59.150 回答
0

我没有看到使用 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。

于 2012-01-24T22:48:22.883 回答
0

Okular 的打印到 PDF

我刚刚使用 Okular 的 Print to PDF 将使用 Keynote 生成的 140MB PDF 转换为 2.8Mb。文本被转换为光栅,放大太多清晰显示像素,但图像保持非常清晰,可用于消息传递应用程序。

于 2021-05-03T16:15:03.247 回答
0

在尝试了此处列出的所有答案之后,我获得的带有大量图形的 pdf 的最佳结果是

pdftocairo input.pdf output.pdf -pdf

我通过在 Gnome 中使用 Evince 打开 pdf 然后打印到文件发现了这一点。与我的 pdf 文件的所有其他答案相比,这导致了更好的文件压缩和更好的文件质量。以这种方式打印到文件时,似乎在后台使用了 cairo 图形:在结果文件上运行pdfinfo显示

制作人:cairo 1.16.0 ( https://cairographics.org )

于 2021-09-11T12:24:18.307 回答
-3

我有同样的问题,我使用这个函数来压缩单个页面,导致文件大小被压缩到原始大小的 1/3。

for (int i = 1; i <= theDoc.PageCount; i++)
{
       theDoc.PageNumber = i;
       theDoc.Flatten();
}
于 2012-04-11T15:33:03.767 回答
-5

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

于 2016-10-03T11:09:26.800 回答