有没有办法从命令行展平 .pdf 图像?

gen*_*ser 32 bash pdf image-manipulation gimp

在 GIMP 中,我可以导入一个 PDF,然后使用 GUI 将它展平(如果它是由多层组成的),方法Flatten Image是在Image下拉菜单中进行选择。然后,我可以使用新文件名导出 PDF。

我想自动化这个。有没有办法通过终端做到这一点?

slm*_*slm 41

我通过谷歌找到了这 2 种方法,在这个主题为:Re: Flattening PDF Files at the UNIX Command Line

方法 #1 - 使用 Imagemagick 的转换:
$ convert -density 300 orig.pdf flattened.pdf 
Run Code Online (Sandbox Code Playgroud)

注意:据报道,这种方法的质量如此。

方法 #2 - 使用 pdf2ps -> ps2pdf:
$ pdf2ps orig.pdf - | ps2pdf - flattened.pdf
Run Code Online (Sandbox Code Playgroud)

注意:据报道此方法可保留图像质量。

  • 方法 1 生成的图像非常模糊,而方法 2 效果很好。 (5认同)
  • 两种方法都会对 pdf 进行光栅化,尽管方法 #2 的分辨率要高得多。所以这些方法都不令人满意。 (4认同)
  • 不幸的是,方法#2 不会光栅化图像,因此如果您试图屏蔽敏感部分,用户仍然可以打开文档并删除图层(使用 Inkscape 之类的东西)。但是,您可以修改方法 #1 的分辨率: `$ convert -density 150 {original,flattened}.pdf` 如果您需要保留磁盘空间,可以使用 `-type Grayscale` 或 `-monochrome` 或其他东西那种。 (3认同)
  • 第二个质量比 GIMP 好——谢谢! (2认同)
  • 关于方法#1,另见/sf/ask/462350451/ (2认同)

小智 23

Ghostscript的(GS),比工作更好地pdf2psconvert我。质量几乎没有下降,文件大小很小。

gs -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite \
-sColorConversionStrategy=/LeaveColorUnchanged  \
-dAutoFilterColorImages=true \
-dAutoFilterGrayImages=true \
-dDownsampleMonoImages=true \
-dDownsampleGrayImages=true \
-dDownsampleColorImages=true \
-sOutputFile=document_flat.pdf document_original.pdf
Run Code Online (Sandbox Code Playgroud)

在这里找到:http: //zeroset.mnim.org/2015/01/07/flatten-pdfs-with-ghostscript/

  • 我尝试使用它通过展平来移除透明层,但它对我不起作用。 (4认同)
  • 这对我不起作用,我收到“不可恢复的错误:.putdeviceprops 中的 rangecheck”。上面的 ps2pdf 解决方案确实有效。 (3认同)

小智 5

ghostscript 在 2016 年末更改了扁平化注释的默认设置。

要现在简单地展平 PDF,您需要 -dPreserveAnnots=false

所以一个简单的命令行现在是

gs -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite \
-dPreserveAnnots=false \
-sOutputFile=document_flat.pdf document_original.pdf
Run Code Online (Sandbox Code Playgroud)