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

<!--itextpdf是生成PDF文档的一个java类库-->
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.7</version>
</dependency>

三、获取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 = "";}


这里从红框77行一路点进去,会看见下面这个PdfReader.class底层代码:

这个方法就能发现,如果下标从0开始,这里–pageNum直接把数值变为-1,循坏条件不满足,获取不到pdf的数据;

四、核心代码:

  /*** 获取固定格式pdf文件的数据信息* @param file*/public void pdfIndentify(MultipartFile file){try {//获取pdfPdfReader 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、按页数获取pdf内容时,需从下标1开始
2、在解析特定格式的pdf文件时,可以先获取每页的pdf内容,然后根据固定的字符串截取所需要的数据信息

java解析pdf文档(前面写了docx的解析所以也思考写一份pdf的解析)--PdfReader底层分析相关推荐

  1. 使用HttpHandler解析并展示PDF文档内容

    前言 如果我们想将服务端的PDF文档内容展示给客户端,往往会通过URL直接访问的方式.这样一来,PDF文档就会毫无保留的保存到客户端去,通过浏览器的PDF插件,客户端可以随意拷贝PDF的副本.(如下图 ...

  2. HttpHandler解析并展示PDF文档内容

    2019独角兽企业重金招聘Python工程师标准>>> HttpHandler 解析并展示 PDF 文档内容 如果我们想将服务端的 PDF 文档内容展示给客户端,往往会通过 URL ...

  3. java pdf_Java 生成 PDF 文档

    最近项目需要实现PDF下载的功能,由于没有这方面的经验,从网上花了很长时间才找到相关的资料.整理之后,发现有如下几个框架可以实现这个功能. 1. 开源框架支持 iText,生成PDF文档,还支持将XM ...

  4. java生成pdf方法_详解Java生成PDF文档方法|chu

    最近项目需要实现PDF下载的功能,由于没有这方面的经验,从网上花了很长时间才找到相关的资料.整理之后,发现有如下几个框架可以实现这个功能. 1. 开源框架支持iText,生成PDF文档,还支持将XML ...

  5. java xsl转换pdf_Java 生成PDF文档-阿里云开发者社区

    最近项目需要实现PDF下载的功能,由于没有这方面的经验,从网上花了很长时间才找到相关的资料.整理之后,发现有如下几个框架可以实现这个功能. 1. 开源框架支持 iText,生成PDF文档,还支持将XM ...

  6. Java使用freemarker生成word文档并转pdf文档

    Java使用freemarker生成word文档后转pdf 先来看看效果图 进入正题 项目需求: 为订单后生成对应的pdf文档,文档内包含图片. 方案一:使用freemarker和itext把html ...

  7. Java使用 PDFBox 2.0 从 PDF 文档中读取所有文本

    在本教程中,我们将学习在 Java 程序中使用 PDFBox 2.0 库从 pdf 文档中读取所有文本. PDF 文档可能包含文本.嵌入图像等作为其内容.PDFBox 中的 PDFTextStripp ...

  8. 【教程】如何使用Java生成PDF文档?

    在如今数字化时代,越来越多的人使用PDF文档进行信息传递和共享.而使用Java生成PDF文档也成为了一个非常重要的技能,因为Java作为一种通用的编程语言,可以在不同的操作系统和平台上运行.下面,我们 ...

  9. Java PDF文档转换 — PDF转Excel、SVG转PDF

    概述 Spire.PDF for Java支持将PDF文档高质量地转换为XPS.图片.SVG.Word.HTML和PDF/A格式,以及支持将XPS.HTML文档转换为PDF格式.本文将通过代码演示来介 ...

  10. java pdf无法加载_无法加载PDF文档 - Angular JS - BLOB

    我试图从Web API获取PDF文档,并希望在Angular App中显示 . 获得"Failed to load PDF document error" . 我已经关注了&quo ...

最新文章

  1. ASP.NET2.0轻松搞定统计图表
  2. 走近分形与混沌(part12)--随机过程与混沌
  3. jquery html 片段,十条jQuery代码片段助力Web开发效率提升
  4. faster rcnn resnet_Faster-rcnn 代码详解
  5. vscode修改c 项目_windows 10上使用vscode编译运行和调试C/C++
  6. Linux文件的软链接和硬链接
  7. sql:Mysql create view,function,procedure
  8. iOS 细碎知识整理
  9. linux 开放端口
  10. PTA是什么?BT-WIFI共存
  11. NWT融资一百万,被老张嘲笑了
  12. Css3:选择器、字体和颜色样式
  13. Metasploit联动CobaltStrike渗透win11主机并提权
  14. [RK3399][Android7.1] Audio中的Ducking模式
  15. 微信收到的文件怎样通过电脑打印
  16. javaweb JSP JAVA 电影院在线订票系统(电影购票系统 电影售票 电影票预订系统)
  17. 对“出轨情人节”的看法
  18. 孙海平:已有退休念头
  19. sg90舵机工作原理_快来听郑老轨分享船舶舵机液压锁报警测试经验!
  20. Ansys ncode Designlife19.0疲劳与裂纹扩展分析资料教程

热门文章

  1. 浅谈js中的异步编程
  2. cocos2dx 4.0入门之泡泡龙项目的分解(一)
  3. 2020年10月31日
  4. 医学影像学和计算机,医学影像学中CR与DR有什么区别?【全】
  5. VideoView大小屏幕切换的总结
  6. Android ijkplayer的使用解析
  7. Omi框架学习之旅 - Hello World 及原理说明
  8. 元宇宙基础知识全汇总
  9. C++ QT MYSQL基操
  10. 【职场和发展】职业期望是指一个人对某种职业的渴求和向往