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

Java 检查PDF文件是否为扫描文件,java,pdf,ocr,Java,Pdf,Ocr,以编程方式检查PDF文件是否完全扫描的最佳方法是什么? 我有iText和PDFBox供我使用。我可以检查pdf文件是否包含文本,并根据结果确定此文件是否为OCRD,但此解决方案并非100%准确。我想知道是否有其他办法来解决这个问题 正如您所理解的,解决方案必须是基于Java的。我想您无法确定这一点。但是你可以尝试一些事情,比如查找文本,尝试OCR pdf,并根据识别文本的数量决定,你可以查找一些基本的扫描错误,如淡出或纸张/书籍边距。你知道文档如何被扫描吗,如果是这样的话?虽然“创建者”元数据项

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


正如您所理解的,解决方案必须是基于Java的。

我想您无法确定这一点。但是你可以尝试一些事情,比如查找文本,尝试OCR pdf,并根据识别文本的数量决定,你可以查找一些基本的扫描错误,如淡出或纸张/书籍边距。

你知道文档如何被扫描吗,如果是这样的话?虽然“创建者”元数据项不是强制性的,但如果扫描仪设置了它,它可能是一个有用的线索。

最好的办法是检查它是否有文本,并查看它是否包含一个大页面大小的图像或大量覆盖页面的平铺图像。如果您还检查了元数据,这应该包括大多数选项。

我只是根据大小来判断。扫描的文件太大了。对于1000页之前的页面,我的经验法则是,真文本pdf:1-20 M,扫描的一个可以高达30到100 M。

您可以使用HasFontResources功能检查pdf是否有任何字体资源(很好地指示文档是否包含任何字体)——这是一个免费的ActiveX组件,理论上,您可以在第三方附加组件的帮助下从Java使用它

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

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

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。

Oof。这听起来像是一个研究生或博士级别的研究项目,尤其是因为扫描的文档中可能也有可用的文本。祝你好运!OCRD pdf将包含文本,这是光学字符识别的要点。当你说完全扫描时,你是什么意思?文档中的所有内容都是图像?所有的东西都经过扫描,然后用OCR转换成文本?如果我用数码相机拍一张照片,然后将照片粘贴到Word中,然后打印成PDF,这算是“扫描”图像吗?Peter,在我的例子中,嵌入图像转换成PDF的Word文档不是OCR PDF。例如,OCRD pdf是一本扫描后保存为pdf文件的书。无论如何,感谢所有回答我问题的人,你们给了我宝贵的建议。现在我有了一个起点。Alex“…基本扫描错误,如淡出或纸张/书籍边距。”似乎是个好主意。Mark,你的答案与我的想法最接近。结合Rowan建议的检查文本/字体资源和Gariel的淡出或纸张/书籍边距,这对我来说似乎是一个很好的起点。谢谢,AlexI认为你应该用OCR检查页面大小的图像。一些PDF阅读器成功地使用了这种方法。我在想,如果PDF同时包含文本页面和图像页面,那么如何实现最佳效果这是行不通的