2016-04-16 11 views
1

Ich habe eine PDF-Datei (ein Teil davon unten angegeben), und möchte Text daraus extrahieren. Ich habe PDFTextStream verwendet, aber es funktioniert nicht mit dieser Datei. (Allerdings funktionierte es mit anderen Dateien, die einfachen Text haben).Java - Text-Extraktion aus PDF mit OCR

Welche anderen OCR-Bibliotheken sind dazu in der Lage?

Bitte Hilfe. Danke.

Glimpses of pdf file

glipmses of pdf file

+0

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. –

+0

@ HåkenLid Text und Zeile sind nicht überlappend, ich habe gezoomt, so scheint es so. – Dax

+0

@ 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

Antwort

1

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

Sie brauchten also überhaupt keine OCR. –