Ich habe versucht, mit PDFBox und es produziert zufriedenstellende Ergebnisse.
Hier ist der Code Text aus PDF zu extrahieren PDFBox mit:
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();
}
}
}
Hat Ihr pdf nur eine gescannte Papierkopie des Originaldokuments enthalten? Sie können nicht 100% genaue Ergebnisse von OCR erwarten, besonders in komplizierten Dokumenten wie diesem. Es ist ein großes Problem, dass sich Text und Linien an vielen Stellen überschneiden. Es macht es sehr schwierig für einen Algorithmus, einzelne Glyphen zu unterscheiden. –
@ HåkenLid Text und Zeile sind nicht überlappend, ich habe gezoomt, so scheint es so. – Dax
@ HåkenLid Ist dieses Dokument zu komplex für OCR? Allerdings brauche ich nicht den ganzen Text. Ich muss nur den Namen, die Adresse (aus dem oberen Abschnitt) und die Tabelle für vergangene Beiträge/Rückerstattungen extrahieren. – Dax