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

时间:2010-03-08 18:43:26

标签: java pdf ocr

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

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

6 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

检查文本/字体资源是确定是否可以从扫描过程生成PDF的最准确方法。再加上马克斯蒂芬斯建议寻找大页面大小的图像等等。

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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文件。