我有一个插入了一些空白页的 PDF。这些页面是背景颜色(在这种情况下为灰色)。我想使用 bash 脚本删除这些页面。
有人建议我们可以使用 eg 扫描文本pdftotext
,但在我的情况下,即使在非空白页面上也找不到文本。
小智 6
谢谢你的代码,gmatht。我已经修改它以使用 GhostScript 检查页面覆盖率并删除覆盖率小于阈值 (0.1%) 的页面。
#!/bin/sh
IN="$1"
filename=$(basename "${IN}")
filename="${filename%.*}"
PAGES=$(pdfinfo "$IN" | grep ^Pages: | tr -dc '0-9')
non_blank() {
for i in $(seq 1 $PAGES)
do
PERCENT=$(gs -o - -dFirstPage=${i} -dLastPage=${i} -sDEVICE=inkcov "$IN" | grep CMYK | nawk 'BEGIN { sum=0; } {sum += $1 + $2 + $3 + $4;} END { printf "%.5f\n", sum } ')
if [ $(echo "$PERCENT > 0.001" | bc) -eq 1 ]
then
echo $i
#echo $i 1>&2
fi
echo -n . 1>&2
done | tee "$filename.tmp"
echo 1>&2
}
set +x
pdftk "${IN}" cat $(non_blank) output "${filename}.pdf"
Run Code Online (Sandbox Code Playgroud)
似乎没有一个实用程序可以从 PDF 中删除空白页面,但我们可以使用convert
imagemagick 的命令创建颜色直方图。空白幻灯片只有一个可以用 检测到的条目wc
。一旦我们有了非空白页的列表,我们就可以将其输入到pdftk
.
请注意,imagemagick 从 0 开始编号页面,因此我们需要对此进行调整。我们可以在标志中使用较低的值-density
来提高性能(尽管太低似乎会导致 imagemagick 段错误)。
如果我们调用以下脚本pdf_rm_blank.sh
,运行pdf_rm_blank.sh A
将A.rm.pdf
创建A.pdf
#!/bin/sh
IN="$1"
PAGES=$(pdfinfo $IN.pdf | grep ^Pages: | tr -dc '0-9')
non_blank() {
for i in $(seq 1 $PAGES)
do
if [ $(convert -density 35 "$IN.pdf[$((i-1))]" -define histogram:unique-colors=true -format %c histogram:info:- | wc -l) -ne 1 ]
then
echo $i
#echo $i 1>&2
fi
echo -n . 1>&2
done | tee out.tmp
echo 1>&2
}
set +x
pdftk $IN.pdf cat $(non_blank) output $IN.rm.pdf
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5878 次 |
最近记录: |