我正在尝试连接多个 pdf 文件,这些文件基本上是包含 jpg 图像的相册页面。对于我的输出 pdf 文件,我希望将图像分辨率调整为 300 dpi,并希望保持最佳质量。我使用的命令是:
gswin64c.exe -dNOPAUSE -dBATCH ^-dDownsampleColorImages=true -dColorImageResolution=300 ^-dDownsampleGrayImages=true -dGrayImageResolution=300 ^-dDownsampleMonoImages=true -dMonoImageResolution=300 ^-sDEVICE=pdfwrite -dJPEGQ=100 -sOutputFile=out.pdf in1.pdf in2.pdf
但是,-dJPEGQ=100 似乎对输出没有影响。更改此参数会导致文件大小相同,并且所有值的图像中都可以看到伪影。使用选项 -dPDFSETTINGS=/printer 运行命令,我得到了更好的结果,没有任何瑕疵,但是此选项也应该导致 300 dpi。那么指定输出文件中 jpg 图像质量的正确命令是什么?
解决方案是使用以下命令调整 DCTEncode 过滤器:
gswin64c.exe -sOutputFile=out.pdf -dNOPAUSE -dBATCH ^-sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -c "<< /ColorACSImageDict << /VSamples [ 1 1 1 1 ] /HSamples [ 1 1 1 1 ] /QFactor 0.08 /Blend 1 >> /ColorImageDownsampleType /Bicubic /ColorConversionStrategy /LeaveColorUnchanged >> setdistillerparams" -f in1.pdf
这会生成一个质量令我满意的压缩文件,并且可以根据每个人的需求进行调整。
编辑:
最近的 Ghostscript 版本 (> 9.50) 已弃用
.setpdfwrite
参数,因此我在答案中删除了它
我认为 Ghostscript 似乎在读取 -c“...” 部分中指定的 /QFactor 时遇到问题。您可以尝试使用这个最小命令进行测试:
gs -sDEVICE=pdfwrite -sOutputFile=output.pdf \
-dCompatibilityLevel=1.7 -dNOPAUSE -dBATCH \
-c '<< /ColorACSImageDict << /VSamples [ 1 1 1 1 ] /HSamples [ 1 1 1 1 ] /QFactor 0.15 /Blend 1 /ColorTransform 1 >> >> setdistillerparams ' \
-f input.pdf
无论指定什么/QFactor,output.pdf 的文件大小和图像质量都是相同的。我认为它仍然使用默认的 /QFactor 值,即 0.9。
所以我认为为 pdfwrite 指定 JPEG 质量的唯一方法是使用预定义的 -dPDFSETTINGS 来设置一些 QFactor 值,并使用附加标志来覆盖其他设置。默认、电子书、打印机和印前的 QFactor 值分别为 0.9、0.76、0.4 和 0.15。请参阅此处的 gs 文档:https://www.ghostscript.com/~chrisl/staging/ghostpdl/doc/_build/VectorDevices.html
这是我用于 PDF 工作流程的内容。 (虽然 QFactor 0.25 并没有真正起作用):
DPI=600
gs -sDEVICE=pdfwrite -sOutputFile=output.pdf \
-dCompatibilityLevel=1.7 -dFastWebView=true \
-dEmbedAllFonts=true -dSubsetFonts=true -dCompressFonts=true \
-dDetectDuplicateImages=true -dDoThumbnails=false -dAutoRotatePages=/None \
-r$DPI -dColorImageResolution=$DPI -dGrayImageResolution=$DPI -dMonoImageResolution=$DPI \
-dDownsampleColorImages=true -dColorImageDownsampleType=/Bicubic -dColorImageDownsampleThreshold=1.0 \
-dDownsampleGrayImages=true -dGrayImageDownsampleType=/Bicubic -dGrayImageDownsampleThreshold=1.0 \
-dDownsampleMonoImages=true -dMonoImageDownsampleType=/Subsample -dMonoImageDownsampleThreshold=1.0 \
-dColorImageFilter=/DCTEncode -dGrayImageFilter=/DCTEncode -dMonoImageFilter=/CCITTFaxEncode \
-dColorConversionStrategy=/LeaveColorUnchanged -dPassThroughJPEGImages=true \
-dUseArtBox -dNEWPDF=true -dNOPAUSE -dBATCH -dSAFER \
-dPDFSETTINGS=/printer \
-c '<< /ColorACSImageDict << /VSamples [ 1 1 1 1 ] /HSamples [ 1 1 1 1 ] /QFactor 0.15 /Blend 1 /ColorTransform 1 >> >> setdistillerparams ' \
-f input.pdf