2015-07-09 16 views
3

我想提取表的內容以PDF喜歡這樣:如何提取PDF文件中的表格內容?

enter image description here

我寫使用iText java PDF libray可以逐行讀取PDF文件行的內容這個java程序,但我不知道如何讓表的內容

import com.itextpdf.text.pdf.PdfReader; 
import com.itextpdf.text.pdf.parser.PdfTextExtractor; 

public class PDFReader { 

    public static void main(String[] args) { 

     // TODO, add your application code 
     System.out.println("Lecteur PDF"); 
     System.out.println (ReadPDF("D:/test.pdf")); 
    } 
     private static String ReadPDF(String pdf_url) 
    { 
     StringBuilder str=new StringBuilder(); 
     try 
     { 

     PdfReader reader = new PdfReader(pdf_url); 
     int n = reader.getNumberOfPages(); 
     for(int i=1;i<n;i++) 
     { 
      String str2=PdfTextExtractor.getTextFromPage(reader, i); 
      str.append(str2); 
      System.out.println(str); 
     } 
     }catch(Exception err) 
     { 
      err.printStackTrace(); 
     } 
     return String.format("%s", str); 
    } 
} 

這就是我得到:

enter image description here

,但是這不是我想要的,我想提取由列線和列的錶行的內容,例如,保存在每行中的Java數組

第一陣列將包含:「N° 「,」DATE OBSERVATIONS「,」TEXTE「

第二個數組將包含:」029/14「,」2014年1月1日替換AVURNAV ...「,」SETE A compter du lundi 7 juillet 2014débuterontles trav ...「

第三個數組將包含:」037/14「,」Le 15 octobre 2014 remplace AVURNAV ...「,」SETE Du 15 septembre 2014 au 15 juillet 2015,travaux ....「

感謝

+2

跟着我重複一遍:「沒有表格,你可能認爲在這個PDF中存在的所有表格都只是一種錯覺。」根據您提取的文本順序,您可以看到它的工作方式從上到下,從左到右。您需要每個文本的精確座標,以及每個列和行的近似值。只有這樣你才能重建它。 – usr2564301

+1

@Jongware對你的口頭禪的修改:「沒有表格,你可能認爲在這個PDF中存在的所有表格都只是一種錯覺...... *除非PDF是一個標記的PDF。*」不幸的是,OP沒有提供鏈接到他的PDF,以便我們可以檢查它是否被標記。所以,親愛的匿名用戶:請更新您的問題,並告訴我們您的PDF是否被標記。 –

+0

@BrunoLowagie:這樣的標記文件是否包含行和列的標記? (我還沒有(需要)這個特定的工作流程。)然後確實應該是可能的。 – usr2564301

回答

1

您可能必須確定共同項目開始/結束字符序列將數據分割成一個數組,如果你的PDF庫不支持提取表。 例如,第一個字段爲nnn/nn,第二個字段結束nnnn/nn,第三個字段在下一個第一個字段開始的地方結束。

這是一個棘手的問題 - 我不得不使用基於座標的方法來處理這個問題,但是您的pdf庫可能不支持提取字母的位置以及實際文本。

+1

iText確實可以讓你獲得所有文本片段甚至所有字形的x和y座標,但它仍然是一個棘手的問題,正如解答[原始問題](http://stackoverflow.com/a/4030714/1622493)。 –