当前位置:   article > 正文

java解析pdf文档(前面写了docx的解析所以也思考写一份pdf的解析)--PdfReader底层分析_pdfreader依赖

pdfreader依赖

一、直接将前篇docx文档转成pdf文档用于测试
二、由于使用pdf文档所以需要引入一个新的依赖

<!--itextpdf是生成PDF文档的一个java类库-->
<dependency>
  <groupId>com.itextpdf</groupId>
  <artifactId>itextpdf</artifactId>
  <version>5.5.7</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

三、获取pdf的文档下标要从1开始,如果像之前一样循坏页数从下标0开始遍历会报错:

错误代码段:

PdfReader pdfReader = new PdfReader(file.getInputStream());
      //获取pdf的页数
      int page = pdfReader.getNumberOfPages();
      for(int i=0 ; i<=page ; i++){
        //获取pdf每一页的内容
        String content = PdfTextExtractor.getTextFromPage(pdfReader, i);
        //根据固定的数据去取需要的数据信息
        String perfix = "";
      }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

报错信息
这里从红框77行一路点进去,会看见下面这个PdfReader.class底层代码:
底层代码
这个方法就能发现,如果下标从0开始,这里–pageNum直接把数值变为-1,循坏条件不满足,获取不到pdf的数据;

四、核心代码:

  /**
   * 获取固定格式pdf文件的数据信息
   * @param file
   */
  public void pdfIndentify(MultipartFile file){
    try {
      //获取pdf
      PdfReader pdfReader = new PdfReader(file.getInputStream());
      //获取pdf的页数
      int page = pdfReader.getNumberOfPages();
      String insAmt = null;
      String insPrice = null;
      String insQty = null;
      String date = null;
      for(int i=1 ; i<=page ; i++){
        //获取pdf每一页的内容
        String content = PdfTextExtractor.getTextFromPage(pdfReader, i);
        PdfReaderContentParser pdfReaderContentParser = new PdfReaderContentParser(pdfReader);
        log.info(content);
        //根据固定的数据去取需要的数据信息
        String perfix = "量";
        String suffix = "文档日期";
        //在切割数据时要考虑到把换行符排掉,所以开始下标多加了1,结束下标减一
        String subString = content.substring(content.indexOf(perfix)+2,content.indexOf(suffix)-1);
        perfix = ":";
        suffix = "作者";
        //由于段落与段落间换行,所以结束下标需要减一,去掉换行符
        date = content.substring(content.indexOf(perfix)+1,content.indexOf(suffix)-1).replaceAll(" ","");
        List<String> dataList = Arrays.asList(subString.split(" "));
        insAmt = dataList.get(0);
        insPrice = dataList.get(1);
        insQty = dataList.get(2);
      }
      //这里由于只是测试所以直接把获得的数据打印出来验证下就好了,实际中这个文档应该是流程中提供的官网文档,会落入数据库中或使用在一定业务场景
      log.info("金额:"+insAmt+";价格:"+insPrice+";数量:"+insQty+";日期:"+date);
      System.out.println("金额:"+insAmt+";价格:"+insPrice+";数量:"+insQty+";日期:"+date);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

结果展示:
结果
五、总结:
1、按页数获取pdf内容时,需从下标1开始
2、在解析特定格式的pdf文件时,可以先获取每页的pdf内容,然后根据固定的字符串截取所需要的数据信息

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/319299
推荐阅读
相关标签
  

闽ICP备14008679号