该文件是我扫描后转换成PDF格式的JPEG图像。
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
选择输出以在各种用途中都有用,可能会导致较大的输出文件。每个设置的精确参数,包括它们的DPI值,都在这个表格中的数十个选项中显示:https://ghostscript.readthedocs.io/en/latest/VectorDevices.html#distiller-parameters。PostScript和PDF输入的控制和特性
-dPDFSETTINGS=configuration
将“熔炼参数”预设为四个预定义设置之一:
/screen
选择低分辨率输出,类似于Acrobat Distiller(版本X及以下)的“屏幕优化”设置。/ebook
选择中等分辨率输出,类似于Acrobat Distiller(版本X及以下)的“电子书”设置。/printer
选择与Acrobat Distiller的“打印优化”(版本X及以下)设置相似的输出。/prepress
选择与Acrobat Distiller的“印前优化”(版本X及以下)设置相似的输出。/default
选择输出,旨在适用于各种用途,可能会导致输出文件较大。
screen
设置对我来说质量太低,但是ebook
效果很好,将一个33Mb的基于扫描的PDF文件压缩到了3.6Mb,并且保持了非常清晰可读的效果。其他-dPDFSETTINGS
选项的选择可以在这里找到:http://milan.kupcevic.net/ghostscript-ps-pdf/,将它们包含在这个答案中可能是一个不错的主意。 - naught101gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
。 - Gabriel Staplespdf2searchablepdf
程序的OCR输出。 - Gabriel Staples-dPDFSETTINGS=/ebook
是可以正常工作的。例如:gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf in.pdf
。这与ps2pdf -dPDFSETTINGS=/ebook in.pdf out.pdf
非常相似(如果不是完全相同的话?),因为ps2pdf
实际上只是Ghostscript(gs
)的一个包装器。此外,关于-dPDFSETTINGS=
的参考,请参阅https://www.ghostscript.com/doc/current/VectorDevices.htm#PSPDF_IN,以及这里的表格:https://www.ghostscript.com/doc/current/VectorDevices.htm#distillerparams。 - Gabriel Staples/ebook
,/screen
等会对PDF进行降采样,即它们会减少像素的数量 - 这是一种非常低效/损失的压缩PDF的方式。与其进行降采样,不如使用图像压缩 - 这样可以得到更好的最终结果(至少在有足够像素的情况下):convert -density 300 input.pdf -quality 30 output.pdf
。 - Zaz**** 错误:在处理图像时遇到了“rangecheck”错误。输出可能不正确。
而且似乎删除了源PDF中的一些图像。 - Caleb Stanfordconvert
命令(convert -density 300 input.pdf -quality 30 output.pdf
)将一个可搜索的962 KB文件转换为一个非可搜索的4.5 MB文件,使得这个“压缩”后的PDF文件大小接近原来的5倍。这绝对不是我寻找的命令。 - Gabriel Staplesconvert
只适用于纯图像的PDF文件。所以如果你扫描一个文档,使用convert
比上面的命令更好,因为它会压缩页面而不是降低像素数(减少像素数量)。 - Zazps2pdf input.pdf output.pdf
ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf
ps2pdf output.{ps,pdf}
。 - GNUSupporter 8964民主女神 地下教會ps2pdf input.pdf output.pdf
。 - frabjousps2pdf
也使用ghostscript,因此你可以使用类似-dPDFSETTINGS=/ebook
的参数。 - Pablo Bianchips2pdf -dPDFSETTING=/ebook in.pdf out.pdf
,文件大小缩小到了272 kB!非常感谢! - Frédéric Grosshansps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf
命令,一个由我的pdf2searchablepdf
程序输出的3页、大小为3.8 MB的输入文件被压缩到了916 KB!不过需要注意的是,ps2pdf input.pdf output.pdf
没有起到任何作用。这是在Ubuntu 20.04上进行的操作,原始PDF已经以300 DPI的分辨率开始处理,具体可参考我的脚本运行,首先使用pdftoppm -tiff -r 300 "$pdf_in" "$temp_dir/pg"
命令转换为TIFF格式。 - Gabriel Staplesps2pdf -dPDFSETTINGS=/screen input.pdf output.pdf
命令。尽管/screen
选项的质量比/ebook
选项差,但压缩效果更好。 - dheerendraconvert -density 200x200 -quality 60 -compress jpeg input.pdf output.pdf
我能够在扫描/摄影文档中实现很好的压缩比例(取决于设置)。根据文档来源,您可能需要减少颜色深度(使用-depth
参数)。
pdfimages input.pdf pages
来提取pbm文件,那么你可以这样做:for page in *.pbm; do convert $page -compress Group4 -type bilevel TIFF:- | convert - output.pdf
。任何OCR都将丢失,所以我通常会接着执行pdfsandwich output.pdf
,这似乎可以进一步减小文件大小。 - Brian Zgs
。 - alfC--density --quality --compress
дёҺ-density -quality -compress
зҡ„йҖүйЎ№пјҢжҲ‘дёҚеҫ—дёҚдҪҝз”ЁеҸҢз ҙжҠҳеҸ·гҖӮ - Rotareti-resize 50%
,根据扫描时使用的DPI大小调整百分比。 - chrkiconvert -resize 30% input.pdf output.pdf
命令,文件就被压缩到了12MB,虽然有点粗糙但仍然可读。 - Gabriele Buondonno/etc/ImageMagick-7/policy.xml
中评论gs的政策。 - aksh1618-density
和-quality
选项更灵活地进行微调,从而实现更精细的调整。提高其中一个选项会增加输出文件的大小,但可以通过减小另一个选项来进行补偿,具体取决于所需的视觉效果。 - Giuseppegs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true \
-dColorImageResolution=150 -dNOPAUSE -dBATCH -sOutputFile=output.pdf input.pdf
这里有一个脚本可以用来重写扫描的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
$1
替换为你的pdf文件名,并放入终端运行。pdfimages -list file.pdf
命令可以查看PDF文件中图片的原始分辨率。 - vstepaniukps2pdf -dPDFSETTINGS=/ebook BiggerPdf SmallerPDF
#!/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
pdf2ps input.pdf temp.ps && ps2pdf14 temp.ps output.pdf && rm temp.ps
- McPepprpdfsizeopt
的另一个答案,请参见这里。-dCompatibilityLevel=1.4
部分(包括最受赞同的答案),因为这个表格表明今天(2020年12月27日)自动使用1.5
或1.7
来设置此选项,并且没有必要覆盖这些值。gs
)将input.pdf
压缩为output.pdf
。-dQUIET
来抑制所有输出到stdout。参见:https://ghostscript.readthedocs.io/en/latest/Use.html。gs -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -dNOPAUSE -dBATCH \
-sOutputFile=output.pdf input.pdf
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH \
-sOutputFile=output.pdf input.pdf
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH \
-sOutputFile=output.pdf input.pdf
time
来查看执行所需的时间(这适用于任何 Linux 命令)。示例输出:$ time gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH -sOutputFile=out.pdf in.pdf
GPL Ghostscript 9.50 (2019-10-15)
Copyright (C) 2019 Artifex Software, Inc. All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Processing pages 1 through 15.
Page 1
Loading NimbusSans-Regular font from /usr/share/ghostscript/9.50/Resource/Font/NimbusSans-Regular... 5205104 3852122 2872760 1487237 3 done.
Page 2
Page 3
Page 4
Page 5
Page 6
Page 7
Page 8
Page 9
Page 10
Page 11
Page 12
Page 13
Page 14
Page 15
real 0m1.326s
user 0m1.142s
sys 0m0.048s
-dQUIET
,将不会显示任何Ghostscript输出,并且在前面使用time
时将得到以下结果:$ time gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH -dQUIET -sOutputFile=out.pdf in.pdf
real 0m1.018s
user 0m0.976s
sys 0m0.040s
ps2pdf
,它是gs
的一个封装器,并且产生非常相似但不完全相同的结果。然而,我更喜欢直接使用上面展示的gs
。
低压缩:300 dpi(文件较大)
ps2pdf -dPDFSETTINGS=/printer input.pdf output.pdf
ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf
ps2pdf -dPDFSETTINGS=/screen input.pdf output.pdf
在我的pdf2searchablepdf
脚本生成的输出上测试上述gs
命令,我看到以下结果:
gs
)文档:有关所有可用的-d
("d
efine")PDFSETTINGS
,请参见此处:https://ghostscript.readthedocs.io/en/latest/VectorDevices.html#controls-and-features-specific-to-postscript-and-pdf-input。我已经引用了该部分内容,除了我以粗体形式添加了每个设置的DPI值,取自这个表格。您可以参考该表格,查看gs
为每个PDFSETTINGS
选项选择的数十个较低级别的设置。
您还可以在此页面上查看各种选项的定义:https://ghostscript.readthedocs.io/en/latest/Use.html:PostScript和PDF输入的控制和特点
-dPDFSETTINGS=configuration
将“分辨率参数”预设为四种预定义设置之一:
/screen
(72 dpi) 选择与Acrobat Distiller(直到版本X)中的“屏幕优化”设置类似的低分辨率输出。/ebook
(150 dpi) 选择与Acrobat Distiller(直到版本X)中的“电子书”设置类似的中分辨率输出。/printer
(300 dpi) 选择与Acrobat Distiller中的“打印优化”(直到版本X)设置类似的输出。/prepress
(300 dpi) 选择与Acrobat Distiller中的“印前优化”(直到版本X)设置类似的输出。/default
(72 dpi) 选择旨在适用于各种用途的输出,但可能会导致输出文件变大。
-dNOPAUSE
禁用每页末尾的提示和暂停。通常在将输出发送到打印机或文件时,应使用此选项(与-dBATCH
一起);对于由其他程序“驱动”Ghostscript的应用程序也可能需要使用此选项。
-dBATCH
使Ghostscript在处理命令行上指定的所有文件后退出,而不是进入交互式循环读取PostScript命令。相当于在命令行末尾加上-c quit
。
-dQUIET
抑制标准输出上的常规信息注释。在将设备输出重定向到标准输出时,目前需要使用此选项。
pdfopt
具有简单的语法,并且可以提高在iPad时代的加载和翻页速度。 :-) - Ari B. Friedman