PDFファイルが完全にスキャンされたものであるかどうかをプログラムで確認するための最良の方法は何ですか?私は自由にiTextとPDFBoxを持っています。PDFファイルにテキストが含まれているかどうかを確認し、その結果に基づいてこのファイルがOCRedであるかどうかを判断できますが、このソリューションは100%正確ではありません。この問題に対処する別の方法があるかどうか知りたいのですが。
ご存知のとおり、ソリューションはJavaベースである必要があります。
最善の策は、テキストが含まれているかどうかを確認し、ページを覆う大きなページサイズの画像または多数のタイル画像が含まれているかどうかを確認することです。メタデータもチェックすると、ほとんどのオプションがカバーされます。
私見あなたはそれを確実に決めることはできません。ただし、テキストの検索、PDFのOCRの試行、認識されたテキストの量の決定に基づいて、フェードアウトや紙/本の余白などの基本的なスキャンエラーを探すことができます。
Quick PDF Library LiteのHasFontResources関数(理論的にはJavaから使用できる無料のActiveXコンポーネント)を使用して、PDFにフォントリソース(ドキュメントにフォントが含まれているかどうかを示すかなり良い指標)があるかどうかを確認できます。サードパーティのアドオンの助けを借りて。
テキスト/フォントリソースのチェックは、スキャンプロセスからPDFが生成されたかどうかを判断するための最も正確な方法です。それは、大きなページサイズの画像などを探すというMarkStephensの提案と相まって。
ただし、残念ながら、PDFがスキャンされたかどうかを確認するための100%保証された正確な方法はありません。
find ./ -name "*.pdf" -print0 | xargs -0 -I {} bash -c 'export file="{}"; if [ $(pdffonts "$file" 2> /dev/null | wc -l) -lt 3 ]; then echo "$file"; fi'
説明:pdfにテキストが含まれている場合、pdffontsfile.pdfには2行以上が表示されます。テキストを含まないすべてのPDFファイルのファイル名を出力するため、スキャンされたPDFが出力されます。
ドキュメントがスキャンされた場合、どのようにスキャンされたかについての知識はありますか?「作成者」メタデータ項目は必須ではありませんが、スキャナーがそれを設定する場合、それはおそらく有用な手がかりになる可能性があります。
サイズで判断するだけです。スキャンされたドキュメントは不当に大きいです。1000ページまでの私の経験則は、真のテキストpdf:1〜20 M、スキャンされたものは30〜100Mになる可能性があります。