0

我正在尝试使用 Tesseract (Tess4J) OCR 将 PDF 文件中的图像(每一页都是扫描图像)转换为文本,但它不起作用:(参见代码中的注释)

public static void main(String[] args) throws IOException
{
    Tesseract instance = Tesseract.getInstance();  // JNA Interface Mapping

    PdfReader reader = new PdfReader(PREFACE); // a PDF File D:\pdf\test.pdf
    int n = reader.getXrefSize();
    PdfObject object;
    PRStream stream;

    // Looking for image and manipulating image stream
    for (int i = 0; i < n; i++)
    {
        object = reader.getPdfObject(i); // every time object null ?why
        if (object == null || !object.isStream())
            continue;

        stream = (PRStream)object;

        PdfImageObject image = new PdfImageObject(stream);
        BufferedImage bi = image.getBufferedImage();

        try {
            String result = instance.doOCR(bi); //take Buffered iamge to transfor ti 
            System.out.println(result);  
        } catch (TesseractException e) {
            System.err.println(e.getMessage());
            stream.clear();
        }
    }
}
4

1 回答 1

1

getPdfObject()为什么总是返回这个问题的答案null是无关紧要的。代码中有一个更重要的错误:您假设 PDF 中的每个流对象都是图像流。这是完全错误的。即使您的 PDF 的所有内容都由扫描图像组成,您仍然会有其他流,例如定义扫描图像在页面上的位置的页面内容流。

您应该阅读我对确定 PDF 页面是否包含文本还是纯图片的回答,并从类中获取每个特定页面上所有图像的图像字节ImageRenderInfo

请丢弃您的代码并重新开始。您复制/粘贴了我在“iText in Action”一书中编写的示例,但您没有阅读我添加的有关此示例的警告。你必须加强并改进你的问题。

于 2013-05-18T10:02:10.823 回答