我想使用 ImageMagick 将 pdf 文件转换为黑白 PDF 文件。但是我有两个问题:我使用这个命令:
convert -colorspace Gray D:\in.pdf D:\out.pdf
- 但是这个命令只转换第一页......如何转换所有页面?
- 使用此命令后,分辨率很糟糕......但如果我使用
-density 300
选项,文件大小增加了一倍以上。所以我想用同样的DPI设置,但是怎么用呢?
非常感谢
我想使用 ImageMagick 将 pdf 文件转换为黑白 PDF 文件。但是我有两个问题:我使用这个命令:
convert -colorspace Gray D:\in.pdf D:\out.pdf
-density 300
选项,文件大小增加了一倍以上。所以我想用同样的DPI设置,但是怎么用呢?非常感谢
假设您安装了所有必要的命令行工具,您可以执行以下操作:
pdfseparate
使用和pdfunite
(Poppler工具)拆分和连接 PDF 。pdfinfo
使用加grep
/提取原始密度egrep
,例如sed
. 这不能保证 PDF 文件的大小相同,只是 DPI 相同。将它们放在一起,您可以拥有一系列 bash 命令,如下所示:
pdfseparate in.pdf temp-%d.pdf; for i in $(seq $(ls -1 temp-*.pdf | wc -l)); do mv temp-$i.pdf temp-$(printf %03d $i).pdf; done
for f in temp-*.pdf; do convert -density $(pdfinfo $f | egrep -o 'Page size:[[:space:]]*[0-9]+(\.[0-9]+)?[[:space:]]*x[[:space:]]*[0-9]+(\.[0-9]+)?' | sed -e 's/^Page size:\s*//'| sed -e 's/\s*x\s*/x/') -colorspace Gray {,bw-}$f; done
pdfunite bw-temp-*.pdf out.pdf
rm {bw-,}temp-*.pdf
注意 1:对于 10-999 页 PDF 的正确排序,有一个肮脏的解决方法(for
/ wc
/ seq
/ printf
)(我不知道如何在 中放置前导零pdfseparate
)。
注意 2:我猜 ImageMagick 将 PDF 视为另一个二进制图像文件,因此例如主要是文本文件,这将导致巨大的 PDF。因此,这是将基于文本的 PDF 转换为黑白的非常糟糕的方法。