【问题标题】:Check if a PDF file is a scanned one检查 PDF 文件是否为扫描文件
【发布时间】:2011-01-25 02:48:52
【问题描述】:

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

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

【问题讨论】:

  • 哎呀。这听起来像是一个研究生或博士水平的研究项目,特别是因为扫描的文档中可能也有可用的文本。祝你好运!
  • OCRed pdf 将包含文本,这是光学字符识别的重点。
  • 当您说完全扫描时,您是什么意思?文档中的所有内容都是图像?一切都被扫描然后用OCR变成文本?如果我用数码相机拍照,然后将该照片粘贴到 Word 中,然后打印到 PDF,这算作“扫描”图像吗?
  • Peter,在我的情况下,嵌入图像转换为 pdf 的 Word 文档不是 OCRed pdf。例如,OCRed pdf 是一本经过扫描然后保存为 pdf 文件的书。
  • 无论如何,谢谢所有回答我问题的人,你们给了我宝贵的建议。现在我有了一个起点。亚历克斯

标签: java pdf ocr


【解决方案1】:

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

【讨论】:

  • 马克,您的回答与我的想法最接近。将它与 Rowan 建议的检查文本/字体资源和 Gariel 的淡出或纸张/书籍页边距相结合,对我来说似乎是一个很好的起点。谢谢,亚历克斯
  • 我认为您应该使用 OCR 检查页面大小的图像。一些PDF阅读器成功地使用了这种方法。我试图在这里思考如何以最佳方式做到这一点stackoverflow.com/q/34092991/54964
【解决方案2】:

恕我直言,您无法确定。但是您可以尝试一些操作,例如查找文本、尝试对 pdf 进行 OCR 并根据识别的文本数量决定,您可以查找一些基本的扫描错误,例如淡出或纸张/书籍页边距。

【讨论】:

  • "...基本的扫描错误,如淡出或纸张/书籍页边距。"似乎是个好主意。
【解决方案3】:

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

检查文本/字体资源是确定 PDF 是否可能是通过扫描过程生成的最准确方法。再加上 Mark Stephens 建议寻找大页面大小的图像等。

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

【讨论】:

  • 如果 PDF 同时包含:文本页和图像页,这将不起作用
【解决方案4】:
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 也是如此。

【讨论】:

    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      我只是根据大小来判断。扫描文件过大。直到 1000 页,我的经验是,真文本 pdf:1-20 M,扫描的可以达到 30 到 100 M。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-19
        • 1970-01-01
        • 2017-12-12
        • 1970-01-01
        • 2018-05-17
        • 1970-01-01
        • 1970-01-01
        • 2012-08-09
        相关资源
        最近更新 更多