2015-07-09 60 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)。 –