我发现此整洁的命令可以使用Ghostscript将多个PDF合并为一个:
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=out.pdf in1.pdf in2.pdf
生成的大小小于2个PDF的总大小。
使用单个文件作为输入运行命令仍然会导致输出文件的大小减小。
Ghostscript上是否可以选择仅复制合并时显示的页面而不进行任何压缩?
如果不是,那么Ghostscript压缩是否可能会如此好以致绝对不会导致质量损失?
我发现此整洁的命令可以使用Ghostscript将多个PDF合并为一个:
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=out.pdf in1.pdf in2.pdf
生成的大小小于2个PDF的总大小。
使用单个文件作为输入运行命令仍然会导致输出文件的大小减小。
Ghostscript上是否可以选择仅复制合并时显示的页面而不进行任何压缩?
如果不是,那么Ghostscript压缩是否可能会如此好以致绝对不会导致质量损失?
Answers:
pdftk不可为CentOS / RHEL 7
gs。pdftk只需串联即可,无需修改,而且速度更快。
您观察到的一些大小优化可能来自Ghostscript清理未使用的对象,其最近获得的字体优化改进(您是否使用了最新版的GS?!?)以及可能对图像进行了重新采样/降采样发生了
Ghostscript,如果用于PDF- > PDF转换,则基本上是这样的:
这意味着对于大多数PDF-> PDF操作,您将对PDF对象具有不同的排序和编号,甚至对象的内部代码也可能已更改(即使您的眼睛看不到输入和输出PDF之间的任何区别)。
默认情况下,Ghostscript还将压缩原始文件中未压缩的所有对象流(但这是无损压缩)。
现在,对于非常简单的命令行(其中不包含任何操作希望),Ghostscript假定您要使用-dPDFSETTINGS=/default,隐式设置此参数并相应地进行操作。
现在什么都/defaultPDFSETTINGS?您有两种选择可以找出:
阅读手册。本节中间的大表提供了概述。您可以看到,它-dPDFSETTINGS=/default本身只是它代表的其他几十个更具体设置的简写。给定文档的链接适用于开发代码的当前HEAD,并且您实际使用的版本当然可能有所不同。
查询(您自己的)Ghostscript以获取此设置的详细含义。我对问题“正在查询Ghostscript以获得输出设备的默认选项/设置...”和问题“什么是PostScript字典,以及如何通过Ghostscript访问它们”的回答。对此进行详细说明。简而言之,要查询Ghostscript的/defaultPDFSETTINGS详细信息,请运行以下命令:
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输出的文件大得多)。
pdftk自2016
-dPDFSETTINGS=设置,然后-d*稍后在命令行中使用设置(在您的答案中)仅覆盖其中的一部分吗?
我在iOS终端上成功使用了以下代码来递归压缩多个PDF。我将其发布是因为我无法通过简单的复制和粘贴找到对我有用的东西。
find . -name '*.pdf' | while read pdf; do gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile="${pdf}_new.pdf" "$pdf"; done
请注意,您可能需要不同的输出质量,因此可以-dPDFSETTINGS按以下方式更改参数:
-dPDFSETTINGS=/screen:质量较低,尺寸较小。
-dPDFSETTINGS=/ebook:质量更高,但pdf略大。
-dPDFSETTINGS=/prepress:输出类似于Acrobat Distiller的“印前优化”设置。
-dPDFSETTINGS=/printer:选择类似于Acrobat Distiller“打印优化”设置的输出。
-dPDFSETTINGS=/default:选择旨在广泛使用的输出,可能以较大的输出文件为代价。