2010-03-08 273 views
8

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

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

+0

OOF。这听起来像是一个研究生或博士学位的研究项目,尤其是因为扫描的文档也可能包含文本。祝你好运! – 2010-03-08 18:46:47

+1

OCR pdf将包含文本,这是光学字符识别的要点。 – 2010-03-08 18:48:45

+1

当你说完全扫描,你是什么意思?文档中的所有内容都是图片?一切都被扫描,然后转换成文本与OCR?如果我用数码相机拍摄照片,然后将该照片粘贴到Word中,然后打印到PDF,那么这算作“扫描”图像吗? – 2010-03-08 18:53:57

回答

3

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

+1

马克, 你的答案是最接近我的想法。将它与Rowan建议的检查文本/字体资源以及Gariel的淡出或纸张/书籍页边距结合起来看起来对我来说是一个很好的起点。 谢谢, 亚历克斯 – Alex 2010-03-09 13:32:14

+0

我认为你应该检查与OCR页面化的图像。某些PDF阅读器成功使用此方法。我正在考虑如何在这里最优化地完成这项工作http://stackoverflow.com/q/34092991/54964 – 2015-12-05 10:40:37

1

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

+0

“...基本扫描错误,如淡出或纸张/书本边距。”似乎是一个好主意。 – Alex 2010-03-09 13:29:30

0

您是否知道文档如何被扫描?虽然“创作者”元数据项目不是强制性的,但如果您的扫描仪设置它,它可能是一个有用的线索。

0

我只是通过尺寸来判断。扫描的文件不合理的大。对于直到1000页,我的经验法则是,真正的文本pdf:1-20 M,扫描的可以增加30到100 M.

1

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

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

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

+0

如果PDF包含文本页面和图像页面 – user2988832 2017-09-28 12:43:45

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文件也是如此。