合計900ページのPDF文書があり、この文書には200ページを超える重複ページがあります。レプリカがある場合は、ソースの直後に表示されます。
たぶんpdftk
完了するかもしれませんが、重複する項目を見つける方法が必要です。
答え1
comparepdf
PDFを比較するためのコマンドラインツールです。0
ファイルが同じ場合は終了コード、それ以外の場合はゼロではありません。テキストの内容や視覚的に比較することができます(例:楽しいスキャン)。
comparepdf 1.pdf 2.pdf
comparepdf -ca 1.pdf 2.pdf #compare appearance instead of text
したがって、あなたができることは、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
編集:@ notauto生成されたコメントに応じて、単一ページのPDFを統合するのではなく、元のファイルからページを選択することを選択できます。ペアごとの比較が完了したら、次の操作を実行できます。
pdftk original.pdf cat $(find -name 'pg_*.pdf' |
awk -F '[._]' '{printf "%d\n",$3}' |
sort -n ) output new.pdf
答え2
以下は@FelixJNコードの修正版です。ここでprintf形式の文字列のミスを修正しました。コードは私が確認し、正常に動作します。
#!/bin/bash
pdftk original.pdf burst #explode the pdf
#the resulting files are named as pg_0001.pdf, pg_0002.pdf etc.
for (( i=1 ; i<=1140 ; i++ )) ; do #loop over all the signle-page pdf files
pdf1=pg_$(printf %04d $i).pdf
pdf2=pg_$(printf %04d $((i+1))).pdf
echo $pdf1 $pdf2
if comparepdf $pdf1 $pdf2 ; then
rm $pdf1 #remove the first if two adjacent files are duplicate
fi
done
#merge the remained files in sorted manner:
pdftk $(find -name 'pg_*.pdf' | sort ) cat output new.pdf
答え3
そのツールにアクセスできない場合は、comparepdf
次のことが私に役立つソリューションでした(FelixJNの回答を使用)。
#explode pdf
pdftk original.pdf burst
#delete consecutive pages that have the same size
last=-1; find . -type f -name '*.pdf' -printf '%f\0' | sort -nz |
while read -d '' i; do
s=$(stat -c '%s' "$i");
[[ $s = $last ]] && rm "$i";
last=$s;
done
#rearrange the pdf
pdftk original.pdf cat $(find -name 'pg_*.pdf' |
awk -F '[._]' '{printf "%d\n",$3}' |
sort -n ) output new.pdf
削除しないページは削除される可能性がありますが、確率は低いと思います。同じサイズのファイルソースを削除します。ディレクトリから同じサイズのファイルを削除する方法は?