问题描述
我有一个 72.9MB 的 PDF 文件,需要缩小到 500KB 以下。
该文件是我扫描的JPEG图像,然后转换为pdf。
最佳方案
使用以下 ghostscript 命令:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook \
-dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
-dPDFSETTINGS
总结:
-
-dPDFSETTINGS=/screen
质量较低,尺寸较小。 (72 dpi) -
-dPDFSETTINGS=/ebook
质量更好,但 pdf 稍大。 (150 dpi) -
-dPDFSETTINGS=/prepress
输出类似于 Acrobat Distiller “Prepress Optimized” 设置 (300 dpi) -
-dPDFSETTINGS=/printer
选择类似于 Acrobat Distiller “Print Optimized” 设置的输出 (300 dpi) -
-dPDFSETTINGS=/default
选择旨在用于各种用途的输出,可能以牺牲更大的输出文件为代价
参考: https://www.ghostscript.com/doc/current/VectorDevices.htm#PSPDF_IN :
Controls and features specific to PostScript and PDF input
-dPDFSETTINGS=configuration
Presets the “distiller parameters” to one of four predefined settings:
/screen
selects low-resolution output similar to the Acrobat Distiller (up to version X) “Screen Optimized” setting./ebook
selects medium-resolution output similar to the Acrobat Distiller (up to version X) “eBook” setting./printer
selects output similar to the Acrobat Distiller “Print Optimized” (up to version X) setting./prepress
selects output similar to Acrobat Distiller “Prepress Optimized” (up to version X) setting./default
selects output intended to be useful across a wide variety of uses, possibly at the expense of a larger output file.
每个选项的确切设置,包括它们的 DPI 值,都显示在此表中的几十个选项中: https://www.ghostscript.com/doc/current/VectorDevices.htm#distillerparams 。
次佳方案
我最喜欢的方法是将 PDF 转换为 PostScript 并返回。但是,它并不总是有效,但是当它有效时,结果很好:
ps2pdf input.pdf output.pdf
正如评论中所建议的,这也直接适用于 PDF。
一些用户在使用 the ebook settings 时还报告了更多成功,如下所示:
ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf
第三种方案
aking1012 是对的。有了更多关于可能的嵌入图像、超链接等的信息。回答这个问题会容易得多!
这里有几个脚本和 命令行 解决方案。使用你认为合适的。
第四种方案
如果您有一个带有扫描图像的 pdf,您可以使用 convert
(ImageMagick) 创建一个带有 jpeg 压缩的 pdf(您可以在任何 pdf 上使用此方法,但您会丢失所有文本信息)。
例如:
convert -density 200x200 -quality 60 -compress jpeg input.pdf output.pdf
根据您的需要调整参数
-
-density :以 dpi 为单位的像素密度(例如 100×100)。更高的像素密度提高了质量和尺寸
-
-quality :压缩比。对于 jpg,它介于 1 到 100 之间,其中 100 质量最好,但压缩率最低
-
-compress :压缩算法。由于压缩伪影,jpeg 压缩可能不是最佳选择。您可以选择 BZip、Fax、Group4、JPEG、JPEG2000、无损、LZW、RLE 或 Zip 作为替代压缩方法(有些只允许黑白图像)。
我能够为扫描/拍摄的文档实现出色的压缩比(取决于设置)。根据文档来源,您可能希望降低颜色深度( -depth
参数)。
第五种方案
我需要缩小包含文档全彩色扫描的 PDF 的大小。就文件而言,我的每一页都是全彩色图像。它们是包含文本和图像的页面的图像,但它们是通过扫描到图像而创建的。
我使用了下面的 ghostscript 命令和另一个线程的组合。
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true \
-dColorImageResolution=150 -dNOPAUSE -dBATCH -sOutputFile=output.pdf input.pdf
这将图像分辨率降低到 150dpi,将我的文件大小减半。查看文档,几乎没有明显的图像质量损失。在我的 2012 Nexus7 上,文本仍然完全可读。
第六种方案
Here is a script 用于重写扫描的 pdf:
#!/bin/sh
gs -q -dNOPAUSE -dBATCH -dSAFER \
-sDEVICE=pdfwrite \
-dCompatibilityLevel=1.3 \
-dPDFSETTINGS=/screen \
-dEmbedAllFonts=true \
-dSubsetFonts=true \
-dColorImageDownsampleType=/Bicubic \
-dColorImageResolution=72 \
-dGrayImageDownsampleType=/Bicubic \
-dGrayImageResolution=72 \
-dMonoImageDownsampleType=/Bicubic \
-dMonoImageResolution=72 \
-sOutputFile=out.pdf \
$1
您可以对其进行一些自定义以使其更可重用,但如果您只有一个 pdf,您可以将 $1
替换为您的 pdf 文件名并将其放入终端中。
第七种方案
-
我使用 LibreOffice Draw 打开 pdf。
-
然后我“导出为pdf”
-
并将“jpeg 压缩质量”设置为 50% 并将 “image resolution” 设置为 150 dpi
这会有一个很好的结果。
第八种方案
我通常使用 ps2pdf 来执行此操作(更简单的语法),如下所示:
ps2pdf -dPDFSETTINGS=/ebook BiggerPdf SmallerPDF
我使用以下 python 脚本来减小生产服务器 (8.04) 中目录中所有 pdf 文件的大小。所以它应该工作。
#!/usr/bin/python
import os
for fich in os.listdir('.'):
if fich[-3:]=="pdf":
os.system("ps2pdf -dPDFSETTINGS=/ebook %s reduc/%s" % (fich,fich))
第九种方案
对我来说最好的是
convert -compress Zip -density 150x150 input.pdf output.pdf
其他方法:
#### gs
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE
### pdf2ps && ps2pdf
pdf2ps input.pdf output.ps && ps2pdf output.ps output.pdf
### Webservice
http://compress.smallpdf.com/de
问候
第十种方案
我强烈推荐 pdfsizeopt 。
它在减小大小方面比我尝试过的任何以前的 CLI 和 GUI 软件(包括 convert
、 gs
、 pdftk
等)都更有效 – 尽管激活 pngout
可能会更慢 – 并且没有它们的一些问题(没有严重像素化/退化的图像,没有元数据丢失,如目录等)。
现在,如果无论后果如何(包括将图像降级到不可读的程度)都需要达到一定的大小,它可能不是您需要的工具,但作为 always-working go-to 解决方案,可以减少 PDF 中不必要的大尺寸而不丢失在可读性、信息和可接受的图像质量方面,我认为它是最佳选择。 (注意:我倾向于先在 Adobe Acrobat 中完成 vectorization-OCR [该函数以前称为 “CleanScan”] 后使用它,这会对某些扫描的文本文档产生巨大的影响。)
我推荐 generic Unix install :
-
安装所有必需的依赖项:
-
下载并安装可执行文件:
curl -L -o https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single chmod +x pdfsizeopt.single cp pdfsizeopt.single /usr/local/bin/pdfsizeopt
用法:
pdfsizeopt original.pdf [compressed.pdf]
发现这篇文章的 mac 用户(或 Linuxbrew 用户)的注意事项:有一个 Homebrew 安装公式:
brew install --HEAD pts/utils/pdfsizeopt