检查PDF文件是否为扫描文件

以编程方式检查PDF文件是否完全扫描的最佳方法是什么? 我有iText和PDFBox供我使用。 我可以检查pdf文件是否包含文本,并根据结果来确定此文件是否为OCR,但此解决方案不是100%准确。 我想知道是否有另一种方法可以解决这个问题。

如您所知,解决方案必须基于Java。

您最好的选择可能是检查它是否有文本,还可以查看它是否包含大页面图像或覆盖页面的大量平铺图像。 如果您还检查元数据,则应涵盖大多数选项。

恕我直言,你无法确定。 但你可以尝试一些东西,如寻找文本,尝试OCR pdf,并根据识别的文本数量决定,你可以寻找一些基本的扫描错误,如淡出或纸/书边距。

你可以使用Quick PDF Library Lite中的HasFontResources函数来检查PDF是否有任何字体资源(很好地指示文档是否包含任何字体) – 一个免费的ActiveX组件,理论上你可以从Java使用它在第三方附加组件的帮助下。

检查文本/字体资源是确定是否可以从扫描过程生成PDF的最准确方法。 这与Mark Stephens建议寻找大页面大小的图像等相结合。

但不幸的是,没有任何100%保证准确的方法来检查PDF是否被扫描。

您是否了解如何扫描文档,如果是的话? 虽然“Creator”元数据项不是强制性的,但如果您的扫描仪设置它,它可能是一个有用的线索。

我只是按尺寸判断。 扫描的文件不合理。 对于1000页,我的经验法则是,真实文本pdf:1-20 M,扫描的那个可以达到30到100 M.

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包含文本,pdffonts file.pdf将显示2行以上。 输出所有不包含文本的pdf文件的文件名,因此扫描的PDF文件也是如此。