2013-05-16 3 views
0

Я пытаюсь преобразовать изображения в PDF файл (каждая страница отсканированного изображения) в текст, используя Тессеракт (Tess4J) OCR, но это не работает: (см комментариев в коде)Как использовать Tesseract

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(); 
     } 
    } 
} 

ответ

1

ответ на вопрос, почему getPdfObject() всегда возвращает null не имеет значения. В коде более важная ошибка: вы предполагаете, что каждый объект потока в PDF является потоком изображения. Это совершенно неправильно. Даже если весь контент вашего PDF-файла состоит из отсканированных изображений, вы все равно будете иметь другие потоки, например потоки содержимого страницы, которые определяют положение отсканированного изображения на странице.

Вы должны прочитать мой ответ Determine whether a PDF page contains text or is purely picture и получить байты изображения для всего изображения на каждой конкретной странице из класса ImageRenderInfo.

Пожалуйста, выбросьте свой код и начните заново. Вы скопировали/вставляли пример, который я написал в контексте моей книги «iText in Action», но вы не прочитали предупреждение, которое я добавил об этом примере. Вам нужно будет активизировать и усовершенствовать свои вопросы.