Я попытался с 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();
}
}
}
ли ваш PDF содержит только отсканированную бумажную копию оригинального документа? Вы не можете ожидать 100% точных результатов от OCR, особенно в сложных документах, подобных этому. Это большая проблема, что текст и строки перекрываются во многих местах. Это делает очень трудным для того, чтобы алгоритм отличал отдельные глифы. –
@ HåkenLid Текст и линия не перекрываются, я увеличил масштаб, так что кажется. – Dax
@ HåkenLid Этот документ слишком сложный для OCR? Однако мне не нужен весь текст. Мне просто нужно извлечь имя, адрес (из верхней части) и таблицу прошлых сборов/возвратов. – Dax