假设你已经安装了所有必要的命令行工具,你可以做到以下几点:
- 斯普利特和使用
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:有一个肮脏的解决方法(for
/wc
/seq
/printf
)为正确的顺序10-999页PDFs(我没有弄清楚如何把前导零置于pdfseparate
)。注意2:我猜ImageMagick将PDF视为另一个二进制图像文件,因此主要用于文本文件,这将导致大量的PDF文件。因此,这是一种非常糟糕的方法来将基于文本的PDF转换为B & W.