2016-06-30 29 views
1

Wie extrahiert man Daten aus einer Tabelle in einem PDF mit Hilfe von pdfbox?PDFBox: Extraktion von Daten aus Tabelle

In diesem Prozess können Index von Text und Inhalt gefunden werden mit PDContentStream und PageStripper Klassen.Index von Zeilen in der Tabelle gefunden werden muss, Kann jemand mit welcher Klasse zu erweitern und welche Methode zu implementieren?

Ich habe folgende zum Extrahieren des Startindex von Texten versucht:

public class Tables { 
    public static void main(String args[]) throws IOException{ 
     BufferedWriter wr; 
     File input = new File("test.pdf"); 
     File output = new File("SampleText.txt"); 
     PDDocument pd=new PDDocument(); 
     pd=PDDocument.load(input); 

     //  PDFTextStripper pds=new PDFTextStripper(); 
     //  String text=pds.getText(pd); 
     PDFTextStripper stripper = new PDFTextStripper() 
     { 
      @Override 
      protected void startPage(PDPage page) throws IOException 
      { 
       startOfLine = true; 
       super.startPage(page); 
      } 

      @Override 
      protected void writeLineSeparator() throws IOException 
      { 
       startOfLine = true; 
       super.writeLineSeparator(); 
      } 

      @Override 
      protected void writeString(String text, List<TextPosition> textPositions) throws IOException 
      { 
       if (startOfLine) 
       { 
        TextPosition firstProsition = textPositions.get(0); 
        writeString(String.format("[%s]", firstProsition.getYDirAdj())); 
        startOfLine = false; 
       } 
       super.writeString(text, textPositions); 
      } 
      boolean startOfLine = true; 
     }; 
     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(); 
    } 
} 

Antwort

0

Vor kurzem habe ich ein ähnliches Projekt, wo ich Daten aus Tabellen extrahieren musste.

Sie haben zwei Möglichkeiten: -

1) Sie tabula (Es ist) ein Open-Source-Tool zum Extrahieren von Tabellen aus PDF verwenden können. http://tabula.technology/ https://github.com/tabulapdf/tabula Sie können das tabula-Befehlszeilentool in Ihrem Code verwenden und die Daten aus einer bestimmten Region extrahieren.

2) Sie müssen Ihren eigenen Algorithmus zum Extrahieren der Tabellendaten entwickeln. Wenn Sie für die zweite Option gehen, dann müssten Sie auch die Koordinaten des Textes extrahieren. Sie können die Schreibzeichenkette der pdfTextStripper-Klasse überschreiben (Sie können darüber googlen). Dann müssen Sie darüber nachdenken, wie Sie diese Informationen verwenden, um die Details zu erhalten, die Sie benötigen. (Koordinaten können sehr hilfreich sein).

Wenn Sie die PDF in einem Standardformat haben, dann empfehle ich Ihnen Tabula zu verwenden, da es nicht viel zu tun gibt.

+0

Gehen Sie zu Ihrer zweiten Option, ich habe bereits die Koordinaten des Textes gefunden, wie in dem Code, den ich angehängt habe. Das Extrahieren der Koordinaten der Linie in einer Tabelle ist, was ich benötige. – Maalini

+0

Wenn Sie Grafikzeile (und nicht Linie des Textes) meinen, dann ich denke, dass Sie dies tun müssten, indem Sie das pdf in Bild umwandeln und dann das Bild Pixel für Pixel travesring. Es gibt eine Methode in Tabula, die die Koordinaten jedes Liniensegments in einem gegebenen Bild zurückgibt. – ANKIT

+0

Hat Ihr Projekt eine PDF-Datei desselben Formats? Wenn Sie eine Beispieldatei hochladen können, hätte ich eine bessere Idee. – ANKIT