logo科技微讯

如何压缩 PDF 文件:imagemagick、Ghostscript

作者:科技微讯
日期:2020-04-11
📜 文章

为什么要压缩 PDF 文档

我用 iPad 扫描了一些文件,想把它保存在印象笔记,但文件体积有点大,同步时间可能有点久。有很多在线压缩 PDF 文件的网站,不过需要把文件上传到他们的服务器,再从他们的服务器下载下来,效率有点低。

我需要一种本地压缩 PDF 文件的方法。我用 Mac,苹果官网介绍了如何使用预览应用压缩 PDF,但压缩后太模糊,完全不能用。以下是更好用的方法。

如何压缩 PDF 文档,以 Mac 为例

使用 Ghostscript

  • 在电脑本地安装 Ghostscript,Mac 用户可以用 brew 安装,如果卡在 updating homebrew...control + C 一次,再稍等;
  • 接着打开 Shrinkpdf: shrink PDF files with Ghostscript,把它提供的 shrinkpdf.sh 文件下载到电脑;
  • 打开终端应用,通过 cd 进入 shrinkpdf.sh 所在的路径,然后使用 sh shrinkpdf.sh input.pdf output.pdf 144 这样的命令压缩 pdf 文件;

其中的 input.pdf 是需要压缩的 pdf 文件,output.pdf 是最后生成的文件,通过 144 设置目标文件的 DPI,144 是比较理想的值,数值越小体积越小,当然也越模糊。

2023-03-25 补充:我问了 ChatGPT 什么是 Ghostscript,以及它有什么用:

Ghostscript 是一种用于 PostScript 语言和 PDF 文件格式的免费开源解释器。它用于将 PostScript 和 PDF 文件转换为其他格式,例如光栅图像(JPEG,PNG 等)或其他矢量格式(SVG,DXF 等)。Ghostscript 通常用作需要处理 PostScript 或 PDF 文件的其他程序的后端,例如打印机,PDF 查看器和图像编辑器。

Ghostscript 可以从命令行或其他程序的库中使用。它适用于 Windows,macOS 和 Linux,并在 GNU Affero 通用公共许可证下获得许可。Ghostscript 是处理 PostScript 和 PDF 文件的强大工具,并广泛用于印刷和出版行业。

使用 imagemagick

imagemagick 有很多功能,可以把 pdf 文件转换成图片,或者反过来把多个图片合并成一个 pdf,等等。当涉及 pdf 操作时,似乎都需要 Ghostscript 的支持,所以首先在电脑安装 Ghostscript 和 imagemagick,用 brew 安装即可。

imagemagick 压缩 pdf 的思路如下:

  • 把 pdf 每一页转换成图片:convert -density 144 file.pdf image.jpg
  • 压缩图片:convert -sampling-factor 4:2:0 -strip -quality 60 -interlace JPEG -colorspace RGB image*.jpg output.jpg
  • 把压缩后的图片重新合并成一个 pdf 文件:convert output*.jpg -quality 60 output.pdf

关于压缩图片所使用的 -sampling-factor 4:2:0 -strip -quality 60 -interlace JPEG -colorspace RGB,可参考stackoverflow的一个问答。

使用 imagemagick 压缩 pdf 有一个大缺点。如果这个 pdf 是扫描件,这样压缩效果很好,但是如果 pdf 的内容是矢量内容,例如 word 文档转换过来的等等,这样反而会增加生成的 pdf 文件的体积。因为 imagemagick 把矢量内容栅格化了,页面都变成了图片,而 shrinkpdf.sh 不存在这个问题。

让 PDF 看起来是扫描出来的样子

Hacker News 有一个帖子分享了多种把 PDF 转换成看起来是用扫描仪扫描出来的样子的方法,例如:

convert -density 150 ORIGINAL.pdf -colorspace gray +noise Gaussian -rotate 0.5 -depth 2 SCANNED.pdf

lookscanned 是国内开发者做的在浏览器本地处理 PDF 使之看上起被打印的网站。


相关文章:

donation赞赏
thumbsup0
thumbsdown0
暂无评论