2016-04-16 7 views
1

У меня есть pdf-файл (часть его приведена ниже) и вы хотите извлечь из него текст. Я использовал PDFTextStream, но он не работает с этим файлом. (Однако он работал с другим файлом, который имеет простой текст).Java - извлечение текста из PDF с использованием OCR

Какие еще библиотеки OCR способны это сделать?

Пожалуйста, помогите. Спасибо.

Glimpses of pdf file

glipmses of pdf file

+0

ли ваш PDF содержит только отсканированную бумажную копию оригинального документа? Вы не можете ожидать 100% точных результатов от OCR, особенно в сложных документах, подобных этому. Это большая проблема, что текст и строки перекрываются во многих местах. Это делает очень трудным для того, чтобы алгоритм отличал отдельные глифы. –

+0

@ HåkenLid Текст и линия не перекрываются, я увеличил масштаб, так что кажется. – Dax

+0

@ HåkenLid Этот документ слишком сложный для OCR? Однако мне не нужен весь текст. Мне просто нужно извлечь имя, адрес (из верхней части) и таблицу прошлых сборов/возвратов. – Dax

ответ

1

Я попытался с PDFBox и удовлетворительные результаты.

Вот код для извлечения текста из PDF с помощью PDFBox:

import java.io.*; 

import org.apache.pdfbox.pdmodel.*; 
import org.apache.pdfbox.text.PDFTextStripper; 
import org.apache.pdfbox.util.*; 

public class PDFTest { 

public static void main(String[] args){ 
PDDocument pd; 
BufferedWriter wr; 
try { 
     File input = new File("C:/BillOCR/data/bill.pdf"); // The PDF file from where you would like to extract 
     File output = new File("D:/SampleText.txt"); // The text file where you are going to store the extracted data 
     pd = PDDocument.load(input); 
     System.out.println(pd.getNumberOfPages()); 
     System.out.println(pd.isEncrypted()); 
     pd.save("CopyOfBill.pdf"); // Creates a copy called "CopyOfInvoice.pdf" 
     PDFTextStripper stripper = new PDFTextStripper(); 
     stripper.setStartPage(1); //Start extracting from page 3 
     stripper.setEndPage(1); //Extract till page 5 
     wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output))); 
     stripper.writeText(pd, wr); 
     if (pd != null) { 
      pd.close(); 
     } 
     // I use close() to flush the stream. 
     wr.close(); 
} catch (Exception e){ 
     e.printStackTrace(); 
     } 
    } 
} 
+1

Так что вам не нужно было OCR вообще. –

Смежные вопросы