引言
大型 PDF 文件会减慢上传速度、超出电子邮件附件限制,并占用共享服务器的存储空间。在 Linux 上,你有几种可靠的方法来减小这些文件大小——从只需几秒钟的单个 Ghostscript 命令,到完全不需要终端的 GUI 工具。
最直接的方法是使用 Ghostscript (gs) 配合 -dPDFSETTINGS=/ebook 预设,它能很好地处理大多数 PDF 文件,并且可以通过任何发行版的包管理器安装。对于更简短的一行命令,ps2pdf 封装了相同的引擎。如果 PDF 主要由图像组成,ImageMagick 的 convert 命令可以让你直接控制密度和质量。对于无损清理而不触及像素,cpdf -squeeze 可以移除冗余对象和元数据膨胀。如果你完全不想使用终端,PDF Arranger 和 LibreOffice Draw 都可以从桌面导出压缩的 PDF。
这些方法适用于所有主要 Linux 发行版。新接触 Linux 终端的读者可以从 Linux 基础介绍 开始学习。在本地压缩之前从远程主机检索 PDF,可以参考 Linux 命令行下载文件。
关键要点
- 用于一般共享的最快可靠一行命令是 Ghostscript 配合
/ebook:gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf in.pdf。 - 对于混合文本和图像的 PDF,使用 Ghostscript 或
ps2pdf;两者都接受-dPDFSETTINGS预设,以获得一致、可重复的输出。当 PDF 仅为图像且需要快速控制密度和 JPEG 质量时,使用 ImageMagick。对于无损结构清理而无需像素重采样,使用cpdf -squeeze。对于桌面一次性任务且脚本无额外价值时,使用 GUI 导出。 - 扫描的 PDF 将每页存储为全分辨率位图,没有文本层,因此降低 DPI 和颜色深度是主要手段,而不是字体或元数据压缩。
- 批量压缩是在目录中对所有 PDF 文件迭代运行 Ghostscript 命令;始终将输出写入单独路径,以避免就地截断源文件。
- 使用
ls -lh file.pdf或du -sh file.pdf在前后确认压缩效果。 - 对于大多数读者和附件,
/ebook是 Ghostscript 在文件大小和可读性之间最佳的通用预设。 - 在基于 Debian 的系统上,ImageMagick 通常以禁用 PDF 编码器权限的形式提供;在
convert读取或写入 PDF 之前,调整policy.xml。
Linux 上导致 PDF 文件较大的原因
在选择压缩方法之前,了解是什么导致你的特定 PDF 文件变大会很有帮助。运行 du -sh file.pdf 来确认文件大小,然后使用 pdfinfo 获取页面数、尺寸和嵌入元数据的快速摘要:
pdfinfo input.pdf
Title: Q3 Report
Pages: 42
Page size: 595.28 x 841.89 pts (A4)
File size: 76534291 bytes
Optimized: no
PDF version: 1.6
如果文件未优化且有许多大尺寸页面,那么通过 Ghostscript 进行图像重采样可能是正确的第一步。如果页面数少但文件仍很大,则嵌入图像或字体膨胀更可能是原因。下面三个根本原因直接对应本教程中的方法。
图像密集型 PDF
嵌入的高分辨率图像是 Linux 系统上 PDF 文件过大的主要原因。一个以 300 dpi 导出用于打印的单幻灯片演示文稿,或图像较多的报告,在任何压缩之前可能达到数百 MB。要检查嵌入的图像及其分辨率,如果尚未安装,请安装 poppler-utils,然后运行 pdfimages:
Debian / Ubuntu / Linux Mint:
sudo apt install poppler-utils
Fedora:
sudo dnf install poppler-utils
Arch Linux:
sudo pacman -S poppler
openSUSE:
sudo zypper install poppler-tools
然后运行:
pdfimages -list input.pdf
page num type width height color comp bpc enc interp object ID
-------------------------------------------------------------------
1 0 image 2480 3508 rgb 3 8 jpeg no 6 0
2 1 image 2480 3508 rgb 3 8 jpeg no 8 0
如果图像分辨率为 300 dpi 或更高,且 PDF предназначен для чтения на экране,则使用 Ghostscript 的 /ebook 预设重采样到 150 dpi 可以去除大部分多余部分,而不会改变文档在屏幕上的阅读效果。
扫描文档 PDF
每个扫描页面都是光栅化图像,而不是可选择文本,直到你运行 OCR。300 dpi 到 600 dpi 的扫描分辨率用于存档质量很常见,因此一份百页文档在没有文本层供字体压缩利用的情况下可能达到数百 MB。将有效分辨率降低或将黑白文本源转换为灰度可以显著减小文件大小。要确认 PDF 是扫描密集型而非图像密集型,请运行上面“图像密集型 PDF”部分所示的 pdfimages -list input.pdf。
嵌入字体和元数据
PDF 通常携带比可见内容更多的内容:粗心合并导致的重复字体流、未使用的颜色配置文件、冗长的 XMP 元数据块,以及增量编辑留下的对象引用残留。这些对读者不可见,但都会计入文件大小。如果仅图像重采样不足以足够减小文件,则使用 cpdf -squeeze 进行结构清理,或使用 Ghostscript 重新生成可以去除这些隐藏开销。使用 pdfinfo 来发现异常高的对象数或未优化标志作为起始信号。
方法 1:使用 Ghostscript 压缩 PDF(推荐)
使用 -dPDFSETTINGS=/ebook(或其他预设)运行 Ghostscript,以更小的图像数据和更干净的内部结构重写 PDF。它可在所有主要 Linux 发行版的默认软件包仓库中获取,适用于混合文本和图像的 PDF,并使用相同标志时产生一致的输出。
在 Linux 上安装 Ghostscript
Debian / Ubuntu / Linux Mint:
sudo apt install ghostscript
gs --version
10.02.1
您安装的补丁版本可能不同;预期输出一行类似 10.xx.x 的版本信息。有关完整标志和配置选项列表,请参阅官方 Ghostscript 文档。
Fedora:
sudo dnf install ghostscript
Arch Linux:
sudo pacman -S ghostscript
openSUSE:
sudo zypper install ghostscript
基本的 Ghostscript 压缩命令
gs \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.4 \
-dPDFSETTINGS=/ebook \
-dNOPAUSE \
-dQUIET \
-dBATCH \
-sOutputFile=output.pdf \
input.pdf
-sDEVICE=pdfwrite:选择 PDF 输出设备。-dCompatibilityLevel=1.4:针对 PDF 1.4 兼容性,以获得广泛的阅读器支持。-dPDFSETTINGS=/ebook:应用 ebook 压缩预设(150 dpi,质量与大小的实际平衡)。-dNOPAUSE:禁用页面间的暂停提示。-dQUIET:抑制信息输出。-dBATCH:处理完成后退出 Ghostscript。-sOutputFile=output.pdf:指定输出文件路径。input.pdf:要压缩的源文件。
注意: 切勿将 -sOutputFile 指向与 input.pdf 相同的路径。如果在写入过程中覆盖输入文件,Ghostscript 可能会生成零字节或损坏的文件。
理解 Ghostscript -dPDFSETTINGS 预设
| 预设 | DPI | 典型大小减少 | 使用场景 |
|---|---|---|---|
| /screen | 72 | 70-85% | 网页显示、邮件预览、最小尺寸 |
| /ebook | 150 | 40-60% | 一般分享、邮件附件、电子阅读器 |
| /printer | 300 | 10-30% | 桌面打印、内部文档 |
| /prepress | 300 | 5-15% | 商业印刷、颜色准确输出 |
| /default | varies | 最小 | 通用用途;可能增加文件大小 |
注意: /default 可能会增加已优化的 PDF 的文件大小,因为它不强制进行激进的下采样。如果任何预设生成的输出文件大于输入文件,则源 PDF 的图像已优化良好。在这种情况下,可以改用 cpdf -squeeze input.pdf -o output.pdf 执行无损结构优化,移除对象开销而不改变图像质量。
Ghostscript 压缩示例,包括压缩前后文件大小
ls -lh input.pdf
-rw-r--r-- 1 user user 73M Jan 10 09:00 input.pdf
运行压缩:
gs \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.4 \
-dPDFSETTINGS=/ebook \
-dNOPAUSE \
-dQUIET \
-dBATCH \
-sOutputFile=output.pdf \
input.pdf
ls -lh output.pdf
-rw-r--r-- 1 user user 14M Jan 10 09:01 output.pdf
在此示例中,73 MB 的源 PDF 使用 /ebook 压缩后变为 14 MB,减少了 81%。
压缩后,打开输出文件并验证文本是否可读,图像在正常缩放下是否可接受。对于扫描文档,检查页面边缘和小字是否未明显退化。如果质量不足,请改用 /printer 而非 /ebook 重新运行命令并比较结果。
方法 2:使用 ps2pdf 和 pdf2ps 压缩 PDF
ps2pdf 是理想选择,当您想要与方法 1 相同的 Ghostscript 压缩效果,但更喜欢更短的命令时。它作为 ghostscript 软件包的一部分提供,因此无需单独安装。对于标准办公文档和导出生成的 PDF,它会产生与使用相同预设的完整 gs 命令完全相同的输出。
pdf2ps 和 ps2pdf 的工作原理
pdf2ps 将 PDF 转换为 PostScript 文件,然后 ps2pdf 将该流通过 Ghostscript 的 PDF 写入器来生成压缩的 PDF。大多数工作流程直接使用带有 -dPDFSETTINGS 标志的 ps2pdf,这会跳过中间文件并在一歩中运行相同的引擎。
逐步命令
单步形式:
ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf
ls -lh output.pdf
-rw-r--r-- 1 user user 14M Jan 10 09:05 output.pdf
输出大小与方法 1 中针对相同输入文件的 Ghostscript 结果匹配,因为 ps2pdf 使用相同的底层引擎。区别在于便利性:对于简单任务,需要输入更少的标志。对于颜色配置文件、字体嵌入或图像过滤器的精细控制,请改用方法 1 中的完整 gs 命令。
此方法的限制
- 复杂的透明度、软掩码或分层艺术作品在通过 PostScript 往返时可能出现视觉变化。
- 矢量曲线通过中间表示形式传递,与直接 PDF 到 PDF 重写相比,可能改变细微的几何形状。
- 对颜色、字体嵌入和图像过滤器的精细控制比手动构建的
gs命令行更有限。 - 交互式表单、JavaScript 操作或多媒体注解在转换后可能丢失行为。
方法 3:使用 ImageMagick 压缩 PDF
当 PDF 已经是类似图像的格式,或者您在现有自动化中标准化使用 convert 时,使用 ImageMagick 以选择的 dpi 和 JPEG 质量来栅格化页面。
安装 ImageMagick
# Debian / Ubuntu / Linux Mint
sudo apt install imagemagick
convert --version
Version: ImageMagick 6.9.11-60 Q16 x86_64
警告:在许多 Debian 和 Ubuntu 系统上,ImageMagick 的默认安全策略会阻止 PDF 读写操作。在运行 convert 命令之前,编辑 /etc/ImageMagick-6/policy.xml(或 /etc/ImageMagick-7/policy.xml),并将 PDF 策略行从 rights="none" 更改为 rights="read|write"。
注意: ImageMagick 7 将 convert 二进制文件重命名为 magick。如果 convert 返回命令未找到错误,请改用 magick convert。要检查安装了哪个版本,请运行 magick --version 或 convert --version。
<!-- 修改这一行: -->
<policy domain="coder" rights="none" pattern="PDF" />
<!-- 修改为: -->
<policy domain="coder" rights="read|write" pattern="PDF" />
使用 convert 命令压缩 PDF
convert -density 150 input.pdf -quality 85 output.pdf
-density 150:在栅格化页面内容时,将输入视为 150 dpi。-quality 85:PDF 内压缩图像数据的 JPEG 质量;较低的数字意味着更小的文件和更明显的伪影。
更强的尺寸削减,质量损失更大:
convert -density 100 input.pdf -quality 60 output.pdf
ls -lh output.pdf
-rw-r--r-- 1 user user 11M Jan 10 09:12 output.pdf
有关安装选项、策略细节和更广泛示例,请阅读《在 Ubuntu 上使用 ImageMagick 调整图像大小》。
何时选择 ImageMagick 而非 Ghostscript
当处理仅图像的 PDF,且您已经习惯使用 dpi 和 JPEG 质量的概念,并且希望使用简短的 convert 命令而无需阅读 Ghostscript 字典时,ImageMagick 很合适。Ghostscript 提供基于预设的控制,并在混合文档中更可预测地保留文本矢量路径。对于脚本化服务器工作或可重复的命令行管道,Ghostscript 是更安全的默认选择。
方法 4:使用 cpdf 压缩 PDF
当您需要减少文件大小而无需更改图像质量时,使用 cpdf。它针对结构开销——冗余对象、重复流和元数据膨胀——而不是重新采样页面内容。
在 Linux 上安装 cpdf
cpdf 是商业软件,提供免费的社区版,由 Coherent Graphics 以静态二进制形式分发。从官方 GitHub binaries tree 下载当前的 Linux 构建,然后将其放置到您的 PATH 中。
wget https://github.com/coherentgraphics/cpdf-binaries/raw/master/Linux-Intel-64bit/cpdf
chmod +x cpdf
sudo mv cpdf /usr/local/bin/
cpdf -version
cpdf Version 2.7
注意:在编写下载脚本之前,请在官方 cpdf GitHub 仓库中确认最新的二进制 URL,发布之间路径可能会变动。
基本的 cpdf 压缩命令
cpdf -squeeze input.pdf -o output.pdf
-squeeze 会移除冗余对象、未使用的资源和重复的数据流。它不会重新采样或更改页面图像,因此视觉输出与源文件完全相同。如果文件看起来仍然相同但体积变小,则节省的空间来自于结构开销而非图像数据。
注意: -squeeze 带来的尺寸缩减因文件而异。那些因合并重复项、未使用的字体流或冗长元数据而膨胀的 PDF 可能缩小 30–50%。没有结构冗余的图像密集型扫描文件变化最小;对于此类文件,请使用带有 -dPDFSETTINGS 预设的 Ghostscript。
cpdf 使用场景和限制
- 当元数据膨胀、重复字体或未使用对象占用了大部分字节时效果显著。
- 当 PDF 是高分辨率扫描图像堆积时,与 Ghostscript 相比效果较弱,因为不会发生 dpi 更改。
- 当利益相关者禁止可见质量变化时非常有用:
-squeeze相对于源图像保持无损。 - 如果在结构清理后仍需要栅格降采样,可以随后与 Ghostscript 结合使用。
方法 5:在 Linux 上使用 GUI 工具压缩 PDF
对于偏好图形界面的用户,有两个工具可以覆盖大多数压缩工作流程,无需访问终端。
PDF Arranger
Debian / Ubuntu / Linux Mint:
sudo apt install pdfarranger
Fedora、Arch Linux、openSUSE 和其他发行版(通过 Flatpak):
flatpak install flathub com.github.jeromerobert.pdfarranger
flatpak run com.github.jeromerobert.pdfarranger
注意: 在运行安装命令之前,必须安装 Flatpak 并配置 Flathub 远程仓库。在 Fedora 上,先运行 sudo dnf install flatpak。在 Arch Linux 上,通过 sudo pacman -S flatpak 安装 flatpak。
PDF Arranger 是一个 GTK 工具,用于合并、拆分、旋转和重新排序页面。文件 → 导出 会生成一个新的 PDF 文件,通常会丢弃粗心合并时产生的重复资源。在导出前删除空白或冗余页面,然后如果仍需要更小的图像,可以将结果传递给 Ghostscript 处理。
LibreOffice Draw 导出设置
在 LibreOffice Draw 中打开 PDF,然后按照以下步骤操作:
- 选择 文件 → 导出为 PDF。
- 在 常规 选项卡中,将 质量 设置为 60–70%,以实现显著的大小缩减,同时保持可接受的视觉输出。如果文档包含图表或需要保持锐利的精细文本,则保持在 90%。
- 在 图像 选项卡中,选择 JPEG 压缩,并将质量滑块设置为 60–75%。如果已启用,则取消选中 无损压缩。
- 在 常规 选项卡中,如果 PDF 将在已包含常见字体的新型系统上查看,则取消选中 嵌入标准字体。
- 单击 导出,确认文件名并保存。
导出后,使用 ls -lh output.pdf 检查输出大小。对于典型的办公软件生成的 PDF,此方法可在正常阅读缩放级别下无可见退化,同时将文件大小减少 30–60%。此方法最适合起源于办公文档、包含矢量文本和图表的 PDF。对于纯扫描页面,使用 Ghostscript 的 /ebook 会产生更好的结果。
何时使用 GUI 方法
- 本地桌面环境中,shell 会话不方便的情况下。
- 一次性发送任务,自动化无额外价值。
- 组合任务,如裁剪、重新排序和导出一次性完成。
- 避免在无头服务器、CI 运行器或自动化批处理计划中使用纯 GUI 流程。
如何在 Linux 中压缩扫描的 PDF 文件
对于大多数扫描的 PDF,此 Ghostscript 命令是正确的起点:
gs \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.4 \
-dPDFSETTINGS=/ebook \
-dNOPAUSE \
-dQUIET \
-dBATCH \
-sOutputFile=output_scanned.pdf \
scanned_input.pdf
/ebook 预设针对 150 dpi,这足以用于屏幕阅读和典型的办公审阅。如果您需要了解为什么扫描 PDF 需要与基于文本的 PDF 不同的处理方法,或者如何通过 DPI 和颜色深度控制进一步压缩,请参阅下面的小节。
为什么扫描 PDF 文件更大
每页都是全页位图,以扫描仪分辨率存储,通常为 300 dpi 到 600 dpi,因此文件大小随像素数量和颜色通道成比例增加。没有 OCR,就没有底层文本可供字体压缩利用,这就是为什么扫描书籍的文件大小远超文本导出的 PDF。
扫描 PDF 的 Ghostscript 命令
本节顶部显示的 /ebook 命令针对 150 dpi,这是大多数用于屏幕阅读的扫描的正确起点。当优先考虑最小文件大小时且可以接受一些可读性损失时,使用 /screen。要使用明确的 DPI 控制或灰度转换进一步优化,请参阅下面的小节。
降低扫描文档的 DPI 和颜色深度
精确的 dpi 控制:
gs \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.4 \
-r150 \
-dNOPAUSE \
-dQUIET \
-dBATCH \
-sOutputFile=output_150dpi.pdf \
scanned_input.pdf
-r150 将光栅分辨率固定为 150 dpi,不受其他 PDFSETTINGS 交互影响,这在标准化归档提交时很有用。
单色或灰度文本扫描:
gs \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.4 \
-dPDFSETTINGS=/ebook \
-sColorConversionStrategy=Gray \
-dProcessColorModel=/DeviceGray \
-dNOPAUSE \
-dQUIET \
-dBATCH \
-sOutputFile=output_gray.pdf \
scanned_input.pdf
对于视觉上为黑色墨水在白色背景上的页面,颜色开销会消失。对于单色文本扫描,灰度输出通常比保留颜色容器再减少 30-50% 的字节。
在 Linux 中批量压缩多个 PDF 文件
批量压缩任务从收集文件开始。有关 shell 结构、引号和执行权限,请参阅 How To Write a Bash Script。在运行循环之前,使用 How To Use Find and Locate to Search for Files on Linux 递归查找 PDF 文件。
批量 Ghostscript 压缩的 Shell 脚本
#!/bin/bash
# batch_compress_pdf.sh
# 使用 Ghostscript 压缩当前目录中的所有 PDF 文件。
# 用法:./batch_compress_pdf.sh [output_directory]
PRESET="/ebook"
OUTPUT_DIR="${1:-./compressed}"
mkdir -p "$OUTPUT_DIR"
for input_file in ./*.pdf; do
[ -f "$input_file" ] || continue
filename="$(basename "$input_file")"
output_file="$OUTPUT_DIR/$filename"
original_size=$(du -sh "$input_file" | cut -f1)
gs \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.4 \
-dPDFSETTINGS="$PRESET" \
-dNOPAUSE \
-dQUIET \
-dBATCH \
-sOutputFile="$output_file" \
"$input_file"
compressed_size=$(du -sh "$output_file" | cut -f1)
echo "Compressed: $filename | Before: $original_size | After: $compressed_size"
done
echo "Done. Compressed files saved to $OUTPUT_DIR"
运行脚本并验证输出大小
-
使脚本可执行:
chmod +x batch_compress_pdf.sh -
从包含 PDF 的目录运行:
./batch_compress_pdf.sh -
示例日志行:
Compressed: report.pdf | Before: 45M | After: 9.2M Compressed: invoice.pdf | Before: 12M | After: 2.1M Compressed: manual.pdf | Before: 73M | After: 14M Done. Compressed files saved to ./compressed -
自定义输出目录:
./batch_compress_pdf.sh /home/user/pdf_output
当 PDF 文件位于子目录中,并且需要在将它们复制到一个文件夹以供此脚本使用之前获取列表时,请使用 How To Use Find and Locate to Search for Files on Linux。
工具比较:选择合适的 PDF 压缩方法
根据 PDF 是文本密集型、扫描密集型还是因对象膨胀,选择合适的工具,然后根据运行作业的位置选择 CLI 或 GUI。
| 工具 | 方法类型 | 压缩控制 | 界面 | 软件包可用性 | 最适合 |
|---|---|---|---|---|---|
| Ghostscript | 有损 | 高(5 个预设 + 标志) | CLI | 所有主要发行版(apt、dnf、pacman、zypper) | 通用压缩、脚本、扫描 PDF |
| ps2pdf | 有损 | 中(继承 gs 预设) | CLI | 随 Ghostscript 包含 | 快速压缩、简单的一行命令 |
| ImageMagick | 有损 | 中(密度、质量标志) | CLI | 所有主要发行版 | 仅图像 PDF、现有的 ImageMagick 工作流 |
| cpdf | 无损 | 低(仅压缩) | CLI | 手动二进制安装 | 无损去重、元数据清理 |
| PDF Arranger | 有损 | 低(导出设置) | GUI | apt / Flatpak(所有发行版) | 桌面一次性压缩、页面管理 |
| LibreOffice | 有损 | 中(导出对话框) | GUI | 所有主要发行版 | 办公来源的 PDF、桌面工作流 |
常见问题解答 (FAQ)
问:Linux 中缩小 PDF 文件大小的最佳命令是什么?
答: 最可靠的方法是使用 Ghostscript 配合 -dPDFSETTINGS=/ebook 预设,这种设置在大多数用例中能平衡质量和文件大小。运行:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
问:Linux 中压缩 PDF 会降低其质量吗?
答: 这取决于预设。/screen 预设会明显降低图像质量(72 dpi),而 /ebook 和 /printer 能保持可读质量。只包含文本的 PDF 在压缩后通常没有明显的质量变化。
问:如何在 Linux Mint 中具体压缩 PDF?
答: Ghostscript 包含在 Linux Mint 的默认仓库中。使用 sudo apt install ghostscript 安装,然后使用标准的 gs 命令。PDF Arranger 也可以通过 Software Manager 安装,用于基于 GUI 的压缩。
问:Linux 中可以同时压缩多个 PDF 文件吗?
答: 可以。使用 bash for 循环,或者参考上面“如何在 Linux 中批量压缩多个 PDF 文件”部分的批处理脚本。该脚本会处理当前目录下的所有 .pdf 文件,并将压缩前后的文件大小记录到 stdout。
问:如何在 Linux 中缩小扫描 PDF 的文件大小?
答: 扫描 PDF 通常包含大量图像。使用 Ghostscript 配合 -dPDFSETTINGS=/ebook 或 -r150 标志,将输出 DPI 从原始扫描分辨率降低。对于灰度文本扫描,可以添加 -sColorConversionStrategy=Gray 进一步减小文件大小。
问:ImageMagick 是 Ghostscript 的良好 PDF 压缩替代品吗?
答: ImageMagick 适用于仅含图像的 PDF,但比 Ghostscript 提供更少的压缩设置控制。在 Debian 和 Ubuntu 上,使用 convert 命令处理 PDF 输入前,必须先更新 ImageMagick 的 PDF 安全策略。
问:如何在 Linux 中检查 PDF 压缩前后的文件大小?
答: 使用 ls -lh filename.pdf 快速查看人类可读的大小,或使用 du -sh filename.pdf 查看磁盘使用量。压缩前后运行这两个命令以确认大小减少。
问:Ghostscript 支持所有主流 Linux 发行版吗?
答: 是的。Ghostscript 包含在 Debian、Ubuntu、Fedora、Arch Linux、openSUSE 和 Linux Mint 的默认仓库中。安装命令有所不同:
apt install ghostscript、dnf install ghostscript、pacman -S ghostscript 或 zypper install ghostscript。
结论
首先使用 pdfinfo 和 pdfimages -list 了解文件大小的主要因素,然后选择合适的工具解决问题。Ghostscript 配合 /ebook 可以覆盖大多数情况。cpdf -squeeze 可以处理其余情况而不影响图像质量。对于其他情况,工具比较表会指向正确的方法。