使用 Java 读取 PDF 文件中的表格

问题描述

我需要在我的程序中将 PDF 表解析为对象,但是我在从 PDF 文件读取表时遇到问题,因为很少有列是空的,但其他列是满的,所以 here is the problem

我正在使用 PDFBox Apache。所以有时城市名称(Miejscowość)是一个很长的进入街道(ulica)列。第二个问题是,当我尝试逐行阅读时,我得到了由空格分隔的友好结果,例如“21-421 Aleksandrów Stanin łukowski lubelskie”,因此理论上我可以按空格拆分此行并获得记录,但就像您看到的很少记录已填充所有列,但其他列很少。逐行阅读的另一个问题是,就像您在图片中看到的那样,有时记录在一个单元格中有几条记录,以“-”分隔,或者像街道号码(数字)列可以有 3 行。下面我逐行添加我的代码读取,我也尝试通过矩形读取值,但它可能无法解决我的问题:

  1. 逐行 (PDFTextStripper)

    for (int i = START_PAGE; i <= numberOfPages; i++) {
         stripper.setStartPage(i);
         stripper.setEndPage(i);
         String page = stripper.getText(document);
         String[] lines = page.split(stripper.getLineseparator());
         int rowToStart = i == START_PAGE ? ROW_TO_START_ON_START_PAGE : ROW_TO_START_ON_NEXT_PAGE;
         for (int j = rowToStart; j < lines.length - 1; j++) {
             log.info(lines[j]);
         }
    
  2. 通过使用 PDFTextStripperByArea

     Rectangle postCodesColumn = new Rectangle(0,40,55,780);
    
     stripper.addRegion("postCodes",postCodesColumn);
     stripper.addRegion("city",cityColumn);
     stripper.addRegion("street",streetColumn);
     stripper.addRegion("streetNumber",streetNumberColumn);
     stripper.addRegion("borough",boroughColumn);
     stripper.addRegion("county",countyColumn);
     stripper.addRegion("voivodeship",voivodeshipColumn);
     stripper.extractRegions(document.getPage(i));
    

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)