Ghostscript合并PDF压缩结果

Dim*_*tas 63 pdf ghostscript

我找到了这个简洁的命令,使用Ghostscript将多个PDF合并为一个:

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=out.pdf in1.pdf in2.pdf
Run Code Online (Sandbox Code Playgroud)

结果大小小于2个PDF的总大小.

使用单个文件作为输入运行命令仍会产生较小的输出文件.

Ghostscript上是否有一个选项可以复制页面,因为它们在合并时出现而不进行任何压缩?

如果没有,Ghostscript压缩是否可能如此之好以至于绝对不会导致质量下降?

Chr*_*aas 69

以下是您在使用设备时可以传递的一些其他选项pdfwrite.根据该页面,如果你没有传递任何东西,那么-dPDFSETTINGS它被设置为接近的东西/screen,虽然它没有更具体.您可以尝试将其设置为-dPDFSETTINGS=/prepress仅压缩300 dpi以上的东西.

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=out.pdf in1.pdf in2.pdf
Run Code Online (Sandbox Code Playgroud)

另一种选择是pdftk:

pdftk in1.pdf in2.pdf cat output out.pdf
Run Code Online (Sandbox Code Playgroud)

  • 感谢您推荐pdftk.对于PDF文件的简单连接,它似乎是完美的. (4认同)

Kur*_*fle 33

你观察到的一些大小优化可能来自Ghostscript清理未使用的对象,它最近获得的字体优化改进(你使用最近版本的GS吗?!)和可能的图像重新/下采样发生了.

Ghostscript,如果用于PDF - > PDF转换,基本上如下操作:

  1. 读入包含其所有对象的输入文件,并将其转换为图形页面表示的内部格式.
  2. 操作是否在命令行上要求内部格式的页面内容.
  3. 写出一个全新的PDF.

这意味着对于大多数PDF - > PDF操作,您将对PDF对象进行不同的排序和编号,甚至对象的内部代码也可能已更改(即使您的眼睛没有发现输入和输出PDF之间的任何差异).

默认情况下,Ghostscript还会压缩原始文件中未压缩的任何对象流(但这是无损压缩).

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

现在什么/defaultPDFSETTINGS?!您有两种选择可以找到:

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

  2. 查询(您自己的)Ghostscript以了解此设置的详细含义.我对"输出设备的默认选项/设置查询Ghostscript"的问题的回答...和问题"什么是PostScript词典,以及如何访问它们(通过Ghostscript)?" 详细说明这一点.简而言之,要查询Ghostscript以获取其/defaultPDFSETTINGS 的详细信息,请运行以下命令:

     gs \
       -q \
       -dNODISPLAY \
       -c ".distillersettings /default get {exch ==only ( ) print ===} forall quit"
    
    Run Code Online (Sandbox Code Playgroud)

    您应该得到与此非常相似的结果:

      /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
    
    Run Code Online (Sandbox Code Playgroud)

    从这些站出来的只有一点:你可能想改变/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 \
    
    Run Code Online (Sandbox Code Playgroud)

所以你可以尝试这个命令:

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
Run Code Online (Sandbox Code Playgroud)

最后,正如Chris Haas已经暗示的那样:pdftk如果您特别不希望 Ghostscript默认应用任何优化,您也可以使用.pdftk根本无法做到这一点,你可以获得相当快的操作速度(但可能还有比Ghostscript更大的文件大小输出).