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

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

在 GIMP 中,我可以导入 PDF,并通过在下拉菜单Flatten Image中进行选择,使用 GUI 来拼合它(如果它是由多个图层制作的) Image。然后我可以使用新文件名导出 PDF。

我想自动化这个。有什么方法可以通过终端来做到这一点吗?

答案1

我通过谷歌找到了这两种方法,标题为:回复:在 UNIX 命令行中拼合 PDF 文件

方法#1 - 使用 Imagemagick 的转换:
$ convert -density 300 orig.pdf flattened.pdf 

笔记:据报道,这种方法的质量一般。

方法#2 - 使用 pdf2ps -> ps2pdf:
$ pdf2ps orig.pdf - | ps2pdf - flattened.pdf

笔记:据报道,这种方法可以保持图像质量。

答案2

pdf2psGhostscript (gs)比convert我更有效。质量几乎没有下降,文件大小也很小。

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

成立这里。请注意有关删除/before 的评论LeaveColorUnchanged

答案3

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

现在要简单地拼合 PDF,您需要-dPreserveAnnots=false

现在是一个简单的命令行

gs -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite \
-dPreserveAnnots=false \
-sOutputFile=document_flat.pdf document_original.pdf

答案4

我经常需要拼合 PDF 或使其仅包含图像。我想从 Nautilus 中快速完成此操作,而不是进入终端,所以我创建了两个鹦鹉螺脚本基于之前的答案。我正在分享这些说明,以防它们对其他人有用。

创建脚本来拼合 PDF:

  1. 转到 Nautilus 脚本文件夹~/.local/share/nautilus/scripts/
  2. 创建一个新的shell脚本文件(例如FlattenPDF.sh
  3. 使该文件可执行(例如 Natiuls PropertiesPermissionsAllow executing file as program
  4. 将以下文本插入文件中:

#!/bin/bash

# Flattend PDFs    

IFS='
'
for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
  if [ -f "$file" ]; then
    base=${file%.*}
    ext=${file##*.}
    newname=${base}_flat.pdf
    gs -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite -dPreserveAnnots=false -sOutputFile=$newname $file
  fi
done

创建脚本以创建纯图像(不可搜索或可选择的文本)PDF:

  1. 转到 Nautilus 脚本文件夹~/.local/share/nautilus/scripts/
  2. 创建一个新的shell脚本文件(例如ImageOnlyPDF.sh
  3. 使该文件可执行(例如 Natiuls PropertiesPermissionsAllow executing file as program
  4. 将以下文本插入文件中:

#!/bin/bash

# Image-only PDFs    

IFS='
'
for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
  if [ -f "$file" ]; then
    base=${file%.*}
    ext=${file##*.}
    newname=${base}_img.pdf
    gconvert -density 200 $file $newname
  fi
done

重新启动 Nautilus(例如,键入nautilus -q退出 Nautilus,然后再次从 Dash 打开 Nautilus)。如果右键单击文件,您应该会看到Scripts包含新脚本的菜单。

相关内容