![有没有办法从命令行压平 .pdf 图像?](https://linux22.com/image/57835/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E4%BB%8E%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8E%8B%E5%B9%B3%20.pdf%20%E5%9B%BE%E5%83%8F%EF%BC%9F.png)
在 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
pdf2ps
Ghostscript (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:
- 转到 Nautilus 脚本文件夹
~/.local/share/nautilus/scripts/
- 创建一个新的shell脚本文件(例如
FlattenPDF.sh
) - 使该文件可执行(例如 Natiuls
Properties
→Permissions
→Allow executing file as program
) - 将以下文本插入文件中:
#!/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:
- 转到 Nautilus 脚本文件夹
~/.local/share/nautilus/scripts/
- 创建一个新的shell脚本文件(例如
ImageOnlyPDF.sh
) - 使该文件可执行(例如 Natiuls
Properties
→Permissions
→Allow executing file as program
) - 将以下文本插入文件中:
#!/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
包含新脚本的菜单。