Ghostscript合并PDF压缩结果
我发现这个整洁的命令将多个PDF合并为一个,使用Ghostscript:
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=out.pdf in1.pdf in2.pdf
生成的大小比2个PDF的组合大小要小。
以单个文件作为input运行该命令仍然会导致较小的输出文件。
Ghostscript有没有一个选项只是复制合并时出现的页面而不进行任何压缩?
如果不是的话,Ghostscript的压缩是否可以达到绝对的质量?
以下是使用pdfwrite
作为设备时可以通过的其他选项 。 根据该页面,如果你不传递任何东西,然后-dPDFSETTINGS
它被设置为接近/screen
,尽pipe它没有得到更具体的。 您可以尝试将其设置为-dPDFSETTINGS=/prepress
应该只能压缩300 dpi以上的东西。
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=out.pdf in1.pdf in2.pdf
另一种select是pdftk :
pdftk in1.pdf in2.pdf cat output out.pdf
您观察到的一些尺寸优化可能来自Ghostscript清理未使用的对象,最近获得的字体优化改进(您是否使用最新版本的GS?!?),以及可能的图像缩放/缩减采样发生了。
Ghostscript,如果用于PDF – > PDF转换,基本上是这样操作的:
- 用所有的对象读入input文件,并把它们转换成graphics页面表示的内部格式。
- 操作要求在命令行上以内部格式的页面内容。
- 写出一个全新的PDF。
这意味着对于大多数PDF – > PDF操作,您将拥有不同的PDF对象的sorting和编号,甚至对象的内部代码可能已经改变(即使您的眼睛没有发现input和输出PDF之间的任何差异)。
默认情况下,Ghostscript也会压缩原始文件中未压缩的任何对象stream(但是这是一种无损压缩)。
现在,对于不包含任何操作愿望的非常简单的命令行,Ghostscript 假定您要使用-dPDFSETTINGS=/default
,隐式设置此参数并相应地进行操作。
现在什么是/default
PDFSETTINGS? 你有两个select来找出:
-
阅读手册 。 本节中间的大桌子给出了一个概述。 你可以看到,这一个
-dPDFSETTINGS=/default
本身就是它所代表的几十个其他更具体的设置的简写。 给出的文档的链接是针对开发代码的当前HEAD ,当然,您实际使用的版本可能会有所不同 。 -
查询(您自己的)Ghostscript了解这个设置的详细含义。 我对“查询Ghostscript输出设备的默认选项/设置…”的问题的回答,以及“什么是PostScript字典,以及如何访问(通过Ghostscript)?” 请详细说明一下。 简而言之,要查询Ghostscript的
/default
PDFSETTINGS的详细信息,请运行以下命令:gs \ -q \ -dNODISPLAY \ -c ".distillersettings /default get {exch ==only ( ) print ===} forall quit"
你应该得到一个非常相似的结果:
/Optimize false /DoThumbnails false /PreserveEPSInfo true /ColorConversionStrategy /LeaveColorUnchanged /DownsampleMonoImages false /EmbedAllFonts true /CannotEmbedFontPolicy /Warning /PreserveOPIComments true /GrayACSImageDict << /HSamples [2 1 1 2] /VSamples [2 1 1 2] /QFactor 0.9 /Blend 1 >> /DownsampleColorImages false /PreserveOverprintSettings true /CreateJobTicket false /AutoRotatePages /PageByPage /NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats] /ColorACSImageDict << /HSamples [2 1 1 2] /VSamples [2 1 1 2] /QFactor 0.9 /Blend 1 >> /DownsampleGrayImages false /UCRandBGInfo /Preserve
从这些中脱颖而出的唯一一点:您可能需要将
/PageByPage
/AutoRotagePages
更改为/None
。 在命令行中,您可以将其设置为-dAutoRotatePages=/None
。给你一个完整的参数清单,这些参数可以明确地告诉Ghostscript通过添加这些参数来尽可能多地使用直通模式来inputPDF:
-dAntiAliasColorImage=false \ -dAntiAliasGrayImage=false \ -dAntiAliasMonoImage=false \ -dAutoFilterColorImages=false \ -dAutoFilterGrayImages=false \ -dDownsampleColorImages=false \ -dDownsampleGrayImages=false \ -dDownsampleMonoImages=false \ -dColorConversionStrategy=/LeaveColorUnchanged \ -dConvertCMYKImagesToRGB=false \ -dConvertImagesToIndexed=false \ -dUCRandBGInfo=/Preserve \ -dPreserveHalftoneInfo=true \ -dPreserveOPIComments=true \ -dPreserveOverprintSettings=true \
所以你可以试试这个命令:
gs \ -o output.pdf \ -sDEVICE=pdfwrite \ -dAntiAliasColorImage=false \ -dAntiAliasGrayImage=false \ -dAntiAliasMonoImage=false \ -dAutoFilterColorImages=false \ -dAutoFilterGrayImages=false \ -dDownsampleColorImages=false \ -dDownsampleGrayImages=false \ -dDownsampleMonoImages=false \ -dColorConversionStrategy=/LeaveColorUnchanged \ -dConvertCMYKImagesToRGB=false \ -dConvertImagesToIndexed=false \ -dUCRandBGInfo=/Preserve \ -dPreserveHalftoneInfo=true \ -dPreserveOPIComments=true \ -dPreserveOverprintSettings=true \ input1.pdf \ input2.pdf
最后 ,正如克里斯·哈斯(Chris Haas)已经暗示的那样:如果你不需要 Ghostscript默认应用的任何优化 ,你也可以使用pdftk
。 pdftk
根本就不能做这样的事情,而且你的操作相对麻烦(但是也可能比Ghostscript的文件大小要大得多),你将获得相当大的速度。