Linux怎么减小PDF文件大小?有哪些工具和方法?

张开发
2026/4/15 10:45:22 15 分钟阅读

分享文章

Linux怎么减小PDF文件大小?有哪些工具和方法?
大型 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 配合/ebookgs -sDEVICEpdfwrite -dCompatibilityLevel1.4 -dPDFSETTINGS/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFileout.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.pdfTitle: 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然后运行pdfimagesDebian / Ubuntu / Linux Mintsudo apt install poppler-utilsFedorasudo dnf install poppler-utilsArch Linuxsudo pacman -S poppleropenSUSEsudo zypper install poppler-tools然后运行pdfimages -list input.pdfpage 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 上安装 GhostscriptDebian / Ubuntu / Linux Mintsudo apt install ghostscriptgs --version10.02.1您安装的补丁版本可能不同预期输出一行类似10.xx.x的版本信息。有关完整标志和配置选项列表请参阅官方 Ghostscript 文档。Fedorasudo dnf install ghostscriptArch Linuxsudo pacman -S ghostscriptopenSUSEsudo zypper install ghostscript基本的 Ghostscript 压缩命令gs \ -sDEVICEpdfwrite \ -dCompatibilityLevel1.4 \ -dPDFSETTINGS/ebook \ -dNOPAUSE \ -dQUIET \ -dBATCH \ -sOutputFileoutput.pdf \ input.pdf-sDEVICEpdfwrite选择 PDF 输出设备。-dCompatibilityLevel1.4针对 PDF 1.4 兼容性以获得广泛的阅读器支持。-dPDFSETTINGS/ebook应用 ebook 压缩预设150 dpi质量与大小的实际平衡。-dNOPAUSE禁用页面间的暂停提示。-dQUIET抑制信息输出。-dBATCH处理完成后退出 Ghostscript。-sOutputFileoutput.pdf指定输出文件路径。input.pdf要压缩的源文件。注意切勿将-sOutputFile指向与input.pdf相同的路径。如果在写入过程中覆盖输入文件Ghostscript 可能会生成零字节或损坏的文件。理解 Ghostscript -dPDFSETTINGS 预设预设DPI典型大小减少使用场景/screen7270-85%网页显示、邮件预览、最小尺寸/ebook15040-60%一般分享、邮件附件、电子阅读器/printer30010-30%桌面打印、内部文档/prepress3005-15%商业印刷、颜色准确输出/defaultvaries最小通用用途可能增加文件大小注意/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 \ -sDEVICEpdfwrite \ -dCompatibilityLevel1.4 \ -dPDFSETTINGS/ebook \ -dNOPAUSE \ -dQUIET \ -dBATCH \ -sOutputFileoutput.pdf \ input.pdfls -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 压缩 PDFps2pdf是理想选择当您想要与方法 1 相同的 Ghostscript 压缩效果但更喜欢更短的命令时。它作为ghostscript软件包的一部分提供因此无需单独安装。对于标准办公文档和导出生成的 PDF它会产生与使用相同预设的完整gs命令完全相同的输出。pdf2ps 和 ps2pdf 的工作原理pdf2ps将 PDF 转换为 PostScript 文件然后ps2pdf将该流通过 Ghostscript 的 PDF 写入器来生成压缩的 PDF。大多数工作流程直接使用带有-dPDFSETTINGS标志的ps2pdf这会跳过中间文件并在一歩中运行相同的引擎。逐步命令单步形式ps2pdf -dPDFSETTINGS/ebook input.pdf output.pdfls -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 imagemagickconvert --versionVersion: ImageMagick 6.9.11-60 Q16 x86_64警告在许多 Debian 和 Ubuntu 系统上ImageMagick 的默认安全策略会阻止 PDF 读写操作。在运行 convert 命令之前编辑/etc/ImageMagick-6/policy.xml或/etc/ImageMagick-7/policy.xml并将 PDF 策略行从rightsnone更改为rightsread|write。注意ImageMagick 7 将convert二进制文件重命名为magick。如果convert返回命令未找到错误请改用magick convert。要检查安装了哪个版本请运行magick --version或convert --version。!-- 修改这一行 -- policy domaincoder rightsnone patternPDF / !-- 修改为 -- policy domaincoder rightsread|write patternPDF /使用 convert 命令压缩 PDFconvert -density 150 input.pdf -quality 85 output.pdf-density 150在栅格化页面内容时将输入视为 150 dpi。-quality 85PDF 内压缩图像数据的 JPEG 质量较低的数字意味着更小的文件和更明显的伪影。更强的尺寸削减质量损失更大convert -density 100 input.pdf -quality 60 output.pdfls -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 上安装 cpdfcpdf是商业软件提供免费的社区版由 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 -versioncpdf 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 ArrangerDebian / Ubuntu / Linux Mintsudo apt install pdfarrangerFedora、Arch Linux、openSUSE 和其他发行版通过 Flatpakflatpak install flathub com.github.jeromerobert.pdfarrangerflatpak 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 \ -sDEVICEpdfwrite \ -dCompatibilityLevel1.4 \ -dPDFSETTINGS/ebook \ -dNOPAUSE \ -dQUIET \ -dBATCH \ -sOutputFileoutput_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 \ -sDEVICEpdfwrite \ -dCompatibilityLevel1.4 \ -r150 \ -dNOPAUSE \ -dQUIET \ -dBATCH \ -sOutputFileoutput_150dpi.pdf \ scanned_input.pdf-r150将光栅分辨率固定为 150 dpi不受其他 PDFSETTINGS 交互影响这在标准化归档提交时很有用。单色或灰度文本扫描gs \ -sDEVICEpdfwrite \ -dCompatibilityLevel1.4 \ -dPDFSETTINGS/ebook \ -sColorConversionStrategyGray \ -dProcessColorModel/DeviceGray \ -dNOPAUSE \ -dQUIET \ -dBATCH \ -sOutputFileoutput_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 \ -sDEVICEpdfwrite \ -dCompatibilityLevel1.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通用压缩、脚本、扫描 PDFps2pdf有损中继承 gs 预设CLI随 Ghostscript 包含快速压缩、简单的一行命令ImageMagick有损中密度、质量标志CLI所有主要发行版仅图像 PDF、现有的 ImageMagick 工作流cpdf无损低仅压缩CLI手动二进制安装无损去重、元数据清理PDF Arranger有损低导出设置GUIapt / Flatpak所有发行版桌面一次性压缩、页面管理LibreOffice有损中导出对话框GUI所有主要发行版办公来源的 PDF、桌面工作流常见问题解答 (FAQ)问Linux 中缩小 PDF 文件大小的最佳命令是什么答最可靠的方法是使用 Ghostscript 配合-dPDFSETTINGS/ebook预设这种设置在大多数用例中能平衡质量和文件大小。运行gs -sDEVICEpdfwrite -dCompatibilityLevel1.4 -dPDFSETTINGS/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFileoutput.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 从原始扫描分辨率降低。对于灰度文本扫描可以添加-sColorConversionStrategyGray进一步减小文件大小。问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可以处理其余情况而不影响图像质量。对于其他情况工具比较表会指向正确的方法。热议微擎灵活开启Redis加速运行新进度提升性能显著

更多文章