2016-07-21 23 views
2

Ich versuche, Daten aus einer PDF-Datei zu extrahieren, die Daten in separaten Tabellen enthält & in Excel konvertieren. Basierend auf dieser link wie meine Notwendigkeit mehr oder weniger das gleiche ist, verwende ich PDFBOX Glas, um die Extraktion zu tun.Java - Problem mit Datenextraktion aus PDF (PDFBox - 2.02)

Um zu testen, ob ich zuerst die Daten aus verschiedenen Tabellen in der PDF extrahieren kann, versucht mit dem unten angegebenen Code. Aber es extrahiert nicht & gibt einen Fehler, der korrupte Objektreferenz angibt, weiß nicht, was es bedeutet.

Um zu sehen, ob es ein Problem mit der PDF selbst gab, überprüfte ich mit https://online2pdf.com & es erfolgreich konvertiert die PDF-Datei zu Excel, so glaube ich, gibt es kein Problem mit der PDF-Datei.

Hoffe, dass die Frage, die ich stehen, ist klar & Eingänge warten auf das, was die Daten aus dem pdf getan werden muss, um extrahieren

Fehlermeldung:

2016-07-21 13:49:11 WARN BaseParser:682 - Corrupt object reference at offset 6371 
2016-07-21 13:49:11 WARN BaseParser:682 - Corrupt object reference at offset 6373 

java.io.IOException: Expected string 'null' but missed at character 'u' at offset 6376 
    at org.apache.pdfbox.pdfparser.BaseParser.readExpectedString(BaseParser.java:1017) 
    at org.apache.pdfbox.pdfparser.BaseParser.readExpectedString(BaseParser.java:1000) 
    at org.apache.pdfbox.pdfparser.BaseParser.parseDirObject(BaseParser.java:879) 
    at org.apache.pdfbox.pdfparser.BaseParser.parseCOSArray(BaseParser.java:651) 
    at org.apache.pdfbox.pdfparser.PDFStreamParser.parseNextToken(PDFStreamParser.java:175) 
    at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:479) 
    at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:446) 
    at org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:149) 
    at org.apache.pdfbox.text.PDFTextStreamEngine.processPage(PDFTextStreamEngine.java:136) 
    at org.apache.pdfbox.text.PDFTextStripper.processPage(PDFTextStripper.java:391) 
    at org.apache.pdfbox.text.PDFTextStripper.processPages(PDFTextStripper.java:319) 
    at org.apache.pdfbox.text.PDFTextStripper.writeText(PDFTextStripper.java:266) 
    at org.apache.pdfbox.text.PDFTextStripper.getText(PDFTextStripper.java:227) 
    at main.Test.readPDF(Test.java:170) 
    at main.Test.main(Test.java:76) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 

Code:

public static void main(String[] args){ 
try { 
     File filePDF = new File("C:\\test.pdf"); 
     PDDocument document = PDDocument.load(filePDF); 
     PDFTextStripper s = new PDFTextStripper(); 
     String content = s.getText(document); 
     System.out.println(content); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
} 
+0

Sie sollten das PDF-Dokument in Frage stellen. –

+0

@Setasign, da das PDF-Dokument Finanzinformationen enthält. Ich werde das nicht teilen können. Sie können jedoch das Beispiel anschauen, das die Informationen enthält, die ich extrahieren möchte (kann auch über den Link heruntergeladen werden). Der Link ist -> https://www.dropbox.com/s/g5iorxzvg92ye1i/Sample%20Contract.pdf?raw=1 – iCoder

+0

Die Datei bringt nicht den Fehler "Corrupt Object Reference". Es gibt jedoch kein Text-Extraktionsergebnis, da die Schriften keinen ToUnicode-Eintrag haben. Versuchen Sie Copy & Paste mit Adobe Reader, es wird auch nicht funktionieren. Ich vermute, dass dies absichtlich geschieht, um zu vermeiden, dass Menschen die Daten extrahieren, um Dienste bereitzustellen, die der Ersteller des PDFs ebenfalls anbietet. –

Antwort

0

Endlich eine jar (PDFxStream) -Datei gefunden, die al extrahiert l in diesem Fall die Daten aus der PDF. Es ist zwar eine kostenpflichtige Version, aber es ist in der Lage, die vollständigen Informationen zu extrahieren, die die anderen bezahlten nicht extrahieren konnten.

Die einzige Sache ist, extrahiert es als eine Schnur & ich würde diesen String analysieren müssen & die spezifischen Informationen davon extrahieren.

+0

Wenn Sie ein PDF-Dokument zur Verfügung gestellt haben, mit dem das Problem reproduziert werden kann, haben Sie möglicherweise eine Lösung auf PDFBox-Basis und gleichzeitig wäre PDFBox für alle verbessert worden. – mkl

+0

@mkl Ich verstehe Ihren Standpunkt. Aber wie bereits erwähnt, enthält die Datei, mit der ich gerade arbeite, die Finanzinformationen und kann daher nicht dasselbe teilen.Ich stellte einen Link für die Probe zur Verfügung, die die repräsentativen Daten enthält, was ich extrahieren muss, wenn das verwendet werden kann, um PDFBox zu verbessern, wäre wunderbar. – iCoder