您观察到的一些大小优化可能来自Ghostscript清理未使用的对象,其最近获得的字体优化改进(您是否使用了最新版的GS?!?)以及可能对图像进行了重新采样/降采样发生了
Ghostscript,如果用于PDF- > PDF转换,则基本上是这样的:
- 读入输入文件及其所有对象,并将其转换为图形页面表示形式的内部格式。
- 执行的操作要求在命令行以内部格式的页面内容。
- 写出全新的PDF。
这意味着对于大多数PDF-> PDF操作,您将对PDF对象具有不同的排序和编号,甚至对象的内部代码也可能已更改(即使您的眼睛看不到输入和输出PDF之间的任何区别)。
默认情况下,Ghostscript还将压缩原始文件中未压缩的所有对象流(但这是无损压缩)。
现在,对于非常简单的命令行(其中不包含任何操作希望),Ghostscript假定您要使用-dPDFSETTINGS=/default
,隐式设置此参数并相应地进行操作。
现在什么都/default
PDFSETTINGS?您有两种选择可以找出:
阅读手册。本节中间的大表提供了概述。您可以看到,它-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
你可能会想改变:从这些脱颖而出的唯一点/AutoRotagePages
从/PageByPage
到/None
。在命令行上,您将其输入为-dAutoRotatePages=/None
。
为了给您提供完整的参数列表,这些参数将专门告诉Ghostscript通过添加以下参数,对输入的PDF采用尽可能多的直通模式:
-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)所暗示的那样:pdftk
如果您特别不希望Ghostscript默认应用任何优化,则也可以使用。pdftk
根本无法执行此类操作,并且由于其相对笨拙的操作,您将获得相当大的速度(但可能比Ghostscript输出的文件大得多)。