使用 PDF 的 Linux 用户经常会遇到熟悉的挫败感:主导搜索结果的压缩工具和教程是为 Windows 和 macOS 编写的,而 Linux 的命令行替代方案分散在不同的软件包中,且文档不一致。在 Linux 上压缩 PDF 完全可以使用免费的开源工具来实现,并且在许多情况下,Linux 命令行方法比其他平台上的图形工具可以更好地控制压缩参数。该过程包括为工作选择正确的工具,并了解平衡文件大小和视觉质量的压缩选项。

使用 Ghostscript 进行命令行 PDF 压缩
Ghostscript 是 Linux 上最强大、最广泛使用的 PDF 处理工具,预安装在许多发行版上,并且可以通过每个包管理器使用。它可以通过指定输出分辨率、图像压缩设置和 PDF 兼容性级别的命令行调用来压缩 PDF。基本压缩命令是 gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=compressed.pdf input.pdf。 PDFSETTINGS 参数控制四个预设值的压缩级别,Ghostscript 将这些值解释为特定的下采样和编码选择。
屏幕预设通过将图像下采样至 72 DPI 来生成最小的文件,仅适用于对打印质量要求不高的屏幕阅读。该电子书预设将采样率降低至 150 DPI,为在平板电脑和笔记本电脑上阅读的文档提供合理的平衡。打印机将采样率预设为 300 DPI,在保持打印质量的同时仍能实现有意义的压缩。印前预设应用无损压缩并保留专业打印的颜色配置文件,生成预设中最大的文件。对于 Linux 上的大多数PDF 压缩 需求,电子书或打印机预设提供了正确的权衡。
尝试压缩 PDF
无需安装。直接在您的浏览器中工作。
使用 ps2pdf 作为轻量级替代方案
ps2pdf 脚本作为大多数 Linux 发行版上 Ghostscript 软件包的一部分提供,为相同的底层功能提供了更简单的命令行界面。运行 ps2pdf input.pdf output.pdf 应用一组默认的压缩优化,无需任何参数配置。默认设置相当于 Ghostscript 打印机预设,生成适合屏幕查看和打印的文件。当您不需要微调输出时,这种零配置方法对于快速压缩非常有用。
为了获得更多控制,ps2pdf 通过命令行接受 Ghostscript 参数。运行 ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf 将电子书预设传递给 Ghostscript。运行 ps2pdf -dPDFSETTINGS=/screen -dDownsampleColorImages=true -dColorImageResolution=100 input.pdf output.pdf 专门自定义彩色图像下采样。这些自定义参数的减小 PDF 大小效果可能比任何预设都更积极,但在将自定义设置应用到批次之前,请始终在单个文件上测试输出。
使用 qpdf 进行结构压缩
Ghostscript 和 ps2pdf 通过 PostScript 解释器重新渲染 PDF 内容,即使在无损设置下也可以引入微妙的渲染变化。 Qpdf 采用不同的方法,对 PDF 文件执行结构优化,而无需重新渲染页面内容。命令 qpdf -- Linearize --object-streams=generate --recompress-flate input.pdf output.pdf 删除冗余对象,重新生成具有更好压缩比的压缩流,并重新组织文件结构以提高读取效率。 Qpdf 压缩是真正无损的,页面像素与原始像素相同。
Qpdf 对于已编辑多次的 PDF 特别有效,因为每次编辑会话都可能留下未使用的对象和次优的流压缩。在经过多轮编辑的 PDF 上运行 qpdf 通常会生成一个小 20% 到 30% 的文件,而不会更改可见内容。 qpdf 工具可通过所有主要 Linux 发行版上的包管理器使用,并且处理文件的速度比 Ghostscript 快得多,因为它完全跳过渲染步骤。对于PDF压缩,必须保证原始像素的完美保真度,qpdf是首选工具。
编写用于批量 PDF 压缩的 Shell 脚本
从命令行压缩单个 PDF 的速度很快。一次压缩一个包含 50 个 PDF 的文件夹非常乏味。一个简短的 shell 脚本将压缩命令包装在一个循环中,该循环处理目录中的每个 PDF。基本脚本是一个 for 循环: for f in *.pdf;做 gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=“compressed_$f” “$f”;完毕。这将创建每个 PDF 的压缩副本,并在文件名中添加前缀,而原始文件保持不变。
向脚本添加错误检查以供生产使用。在尝试压缩之前检查输入文件是否存在并且可读。检查输出文件是否已成功创建,并且压缩后文件大小是否非零。将每个文件的原始文件大小、压缩文件大小和压缩率记录到文本文件中以供以后查看。编写良好的批量压缩脚本可以节省数小时的手动命令行工作,并准确记录哪些文件被压缩、压缩时间和压缩程度。 WukongPDF 等工具通过浏览器界面为喜欢图形工作流程的 Linux 用户提供批量减小 PDF 大小 功能。
在 Linux GUI 中使用 PDF 压缩
喜欢图形界面而不是命令行的 Linux 用户有多种 PDF 压缩选项。 PDF Arranger 可通过大多数包管理器使用,提供用于重新排序、删除和旋转 PDF 页面的可视化界面,其导出功能包括对图像进行下采样的压缩选项。 Xournal++ 在笔记本界面中打开 PDF,并可以将带注释的文档导出为压缩 PDF。 LibreOffice Draw 可以打开 PDF 并通过 PDF 导出对话框应用压缩设置导出它们。
基于浏览器的 PDF 压缩工具在 Linux、Windows 和 macOS 上的工作方式相同,因为它们在独立于操作系统的浏览器中运行。打开您喜欢的基于浏览器的工具,上传 PDF,选择压缩级别,然后下载结果。这种与操作系统无关的方法在 Linux 上特别方便,因为它避免了安装、配置和更新命令行工具或通过包管理器寻找正确的压缩实用程序的需要。
在 Linux 上验证压缩结果
压缩 PDF 后,使用 Linux 原生工具验证输出质量。 pdfinfo 命令是 poppler-utils 包的一部分,可显示原始文件和压缩文件的页数、页面大小和 PDF 版本,确认页面结构完好无损。 ImageMagick 的识别命令可以将各个页面提取为图像并报告其像素尺寸,从而允许您检查下采样是否按预期降低了图像分辨率。
要进行视觉质量检查,请在 Evince、Okular 或您首选的 Linux PDF 查看器的两个实例中并排打开原始 PDF 和压缩 PDF。将包含文本和图像的页面放大至至少 200%。比较文本边缘的清晰度以及照片区域中是否存在 JPEG 压缩伪影。如果压缩版本显示明显的质量下降,请使用更高质量的预设或自定义 Ghostscript 参数重新运行压缩,以提高下采样分辨率和 JPEG 质量阈值。
使用 ImageMagick 进行图像特定压缩
当 PDF 文件大小主要由一些大图像主导时,通过 Ghostscript 压缩整个 PDF 对于文本和矢量部分可能有点过大。 ImageMagick 可以定位 PDF 中的特定图像。使用 pdfimages(poppler-utils 包的一部分)提取超大图像。使用转换命令单独压缩每个提取的图像,并针对特定图像类型调整质量和调整大小参数。然后使用 img2pdf 工具将压缩图像重新组合成新的 PDF。
这种外科手术式的压缩方法可以完全保留文本清晰度,因为文本层永远不会重新渲染。仅修改了图像。对于将清晰的矢量文本与不必要的高分辨率照片相结合的 PDF,文件大小的减小可能会非常显着。例如,在文本文档中嵌入 1200 DPI 照片的 PDF 可以通过仅将照片下采样至 300 DPI 同时保持文本不变,将图像大小减少 80% 或更多。
对于在压缩过程中喜欢图形反馈的 Linux 用户,PDF Compressor 是一款基于 GTK 的应用程序,可通过 Flathub 获取,它为 Ghostscript 压缩提供可视化界面,并可并排预览原始输出和压缩输出。它支持批处理并保存压缩配置文件以供重复使用。
对于在 Linux 上通过电子邮件分发的 PDF,命令 mutt 支持直接从命令行附加文件。压缩后,使用 ls -lh 验证压缩文件大小,并确认其低于收件人电子邮件服务器附件限制,对于大多数提供商来说通常为 25 MB。如果文件仍然太大,请考虑在发送之前使用 pdftk 或 qpdf 将 PDF 拆分为较小的部分。
poppler-utils 软件包可在所有 Linux 发行版上使用,其中包括 pdftoppm,可将 PDF 页面转换为图像格式。当您想要在重新组装各个页面之前将特定于图像的压缩工具应用到各个页面时,这可以作为中间步骤很有用。
对于服务器环境中的自动 PDF 压缩,可以从 cron 作业或 systemd 计时器调用 Ghostscript 以按计划处理传入的 PDF。命令行方法使自动化变得简单。
Linux 原生 PDF 压缩工具与 shell 脚本的灵活性相结合,可以说是任何操作系统上最强大且可定制的 PDF 压缩环境。
这种灵活性和控制使得 Linux 的 PDF 压缩方法值得经常处理大型文档集合的任何人学习。
尝试压缩 PDF
无需安装。直接在您的浏览器中工作。
