我有一份 pdf 文档,总共 900 页,其中有 200 多个重复页面。当存在重复项时,它会立即出现在原始项之后。
也许pdftk
可以完成这项工作,但我需要某种方法来找出重复项......
comparepdf
是一个用于比较 PDF 的命令行工具。如果文件相同则退出代码0
,否则为非零。您可以通过文本内容或视觉进行比较(例如扫描有趣):
comparepdf 1.pdf 2.pdf
comparepdf -ca 1.pdf 2.pdf #compare appearance instead of text
Run Code Online (Sandbox Code Playgroud)
所以你可以做的是分解 PDF,然后成对比较并相应删除:
#!/bin/bash
#explode pdf
pdftk original.pdf burst
#compare 900 pages pairwise
for (( i=1 ; i<=899 ; i++ )) ; do
#pdftk's naming is pg_0001.pdf, pg_0002.pdf etc.
pdf1=pg_$(printf 04d $i).pdf
pdf2=pg_$(printf 04d $((i+1))).pdf
#Remove first file if match. Loop not forwarded in case of three or more consecutive identical pages
if comparepdf $pdf1 $pdf2 ; then
rm $pdf1
fi
done
#renunite in sorted manner:
pdftk $(find -name 'pg_*.pdf' | sort ) cat output new.pdf
Run Code Online (Sandbox Code Playgroud)
编辑:根据@notauto generated 的评论,人们可能会选择从原始文件中选择页面,而不是统一单页 PDF。两两比较完成后,可以执行以下操作:
pdftk original.pdf cat $(find -name 'pg_*.pdf' |
awk -F '[._]' '{printf "%d\n",$3}' |
sort -n ) output new.pdf
Run Code Online (Sandbox Code Playgroud)