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转换,基本上是这样操作的:

  1. 用所有的对象读入input文件,并把它们转换成graphics页面表示的内部格式。
  2. 操作要求在命令行上以内部格式的页面内容。
  3. 写出一个全新的PDF。

这意味着对于大多数PDF – > PDF操作,您将拥有不同的PDF对象的sorting和编号,甚至对象的内部代码可能已经改变(即使您的眼睛没有发现input和输出PDF之间的任何差异)。

默认情况下,Ghostscript也会压缩原始文件中未压缩的任何对象stream(但是这是一种无损压缩)。

现在,对于不包含任何操作愿望的非常简单的命令行,Ghostscript 假定您要使用-dPDFSETTINGS=/default ,隐式设置此参数并相应地进行操作。

现在什么/default PDFSETTINGS? 你有两个select来找出:

  1. 阅读手册本节中间的大桌子给出了一个概述。 你可以看到,这一个-dPDFSETTINGS=/default本身就是它所代表的几十个其他更具体的设置的简写。 给出的文档的链接是针对开发代码的当前HEAD ,当然,您实际使用的版本可能会有所不同

  2. 查询(您自己的)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默认应用的任何优化 ,你也可以使用pdftkpdftk根本就不能做这样的事情,而且你的操作相对麻烦(但是也可能比Ghostscript的文件大小要大得多),你将获得相当大的速度。