一、举例需求(拿较难的发票识别举例)

平时工作或者开发过程中如果遇到需要识别pdf发票中信息的情况,如获取发票代码号码,开票日期,校验码等,比如下面的发票,项目中需要读取发票中信息

二、方法原理

使用java中的pdfbox组件引用jar包使用,其中PDFTextStripper负责读取pdf中的文字信息,使用正则表达式寻找文字信息或者使用字符串定位寻找信息

首先在pom文件中引用pdfbox, 引用pdfbox代码如下

  <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.23</version></dependency>

三、代码实现

在引入pdfbox后,我们之间获取pdf文件信息,从前台传的文件中进行如下操作,

//multipartFile为multipartFile文件类型,将文件转化为文件流被PDDocument加载
PDDocument document = PDDocument.load(multipartFile.getInputStream());
document.getClass();
//使用PDFTextStripper 工具
PDFTextStripper tStripper = new PDFTextStripper();
//设置文本排序,有规则输出
tStripper.setSortByPosition(true);
//获取所有文字信息
String info = tStripper.getText(document);

获取得到的发票信息如下所示是一些杂乱的文字信息

我们现在目的是从这些杂乱信息中获取我们想要的信息,如发票代码,发票号码,开票日期,校验码

下面就有两种方式获取这些信息,两种方式原理不同,可以分开使用也可以结合使用(更加万无一失)

方式一:使用正则表达式寻找关键信息

寻找相似点,例如发票代码附近就有换行符的存在【\r\n】其他信息周围存在着空格或者年月日等字眼,通过这种方式我们来写正则匹配方式(正则其实我也不很会,看着其他正则写的)

例如发票号码就是一个8位1-9的数字,周围都是是【\r\n】于是我们可以写成这样

[\r\n][0-9]{8}[\r\n]

其他的正则表达式可以写成

//发票代码

[0-9]{12}[\r]

//开票日期

\d{4}[年]\d{2}[月]\d{2}[日]

//校验码

[ ]\d{5}[ ]\d{5}[ ]\d{5}[ ]\d{5}

这样正则表达式就写完成了,通过表达式可以从散乱的信息中找到我们要的信息了

方式二:通过String寻找关键词位置

这项有个缺点就是需要【发票代码:013002100111】这种形式的数据,如果不是的话就定位不到数据信息,原理是需找到【发票代码】的位置,然后取对应数量位的数字值,代码如下

    int index = info.indexOf("发票代码");if (index == -1) {index = info.indexOf(key2);if (index == -1 || index == 0) {index = info.indexOf(key + " :");}}if ("发票代码".equals(key)) {String fpdm = info.substring(index + 5, index + 18);text = fpdm.replace(" ", "").replace(":", "").trim();text = text.length() > 12 ? text.substring(0, 12) : text;text = text.length() == 12 ? text : "";}

通过定位找到对应的信息

Java识别获取pdf中文字信息相关推荐

  1. Java识别获取pdf中文字信息(此方法任意pdf的信息都可以拿到)

    一.举例需求(拿较难的发票识别举例) 平时工作或者开发过程中如果遇到需要识别pdf发票中信息的情况,如获取发票代码号码,开票日期,校验码等,比如下面的发票,项目中需要读取发票中信息 二.方法原理 使用 ...

  2. java解析pdf获取pdf中内容信息

    java解析pdf获取pdf中内容信息 今日项目中需要将pdf中的数据获取到进行校验数据,于是前往百度翻来覆去找到以下几种办法,做个笔记,方便日后查询. 废话不多说,我要直接上代码装逼了 第一种 使用 ...

  3. java 图片识别提取_老司机帮您Java 提取/读取PDF中的图片

    电脑现已成为我们工作.生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到Java 提取/读取PDF中的图片的问题,如果我们遇到了Java 提取/读取PDF中的图片的情况,该怎么处理怎么才能解决 ...

  4. java pdfbox读取pdf中的表格

    java pdfbox读取pdf中的表格 目前遇到了需要解析pdf中表格的需求,遇到无法解析表格中的空格,求助大神帮助!!! <dependency><groupId>org. ...

  5. 报告上集 | 《认文识字·中文字信息精准化》报告

    您好,欢迎关注<认文识字--中文字信息精准化>报告.我是安秀. 这里说的"中文字",是"中国文字"的简称,也就是我们常说的"汉字" ...

  6. 报告上、下集 |《认文识字●中文字信息精准化》

    您好,欢迎关注<认文识字--中文字信息精准化>报告.我是安秀. 这里说的"中文字",是"中国文字"的简称,也就是我们常说的"汉字" ...

  7. Python 利用百度文字识别 API 识别并提取图片中文字

    Python 利用百度文字识别 API 识别并提取图片中文字 利用百度 AI 开发平台的 OCR 文字识别 API 识别并提取图片中的文字.首先需注册获取 API 调用的 ID 和 key,步骤如下: ...

  8. C# 获取PDF中的数字签名证书

    PDF中的加数字签名是对文档权威性的有效证明.我们在向PDF文档添加签名时,需要准备可信任的签名证书.同时,对已有的签名,可验证签名是否有效,也可以获取文档中的签名证书信息.下面,以C#代码示例展示如 ...

  9. spring五:获取容器中对象信息

    // 获取容器中对象信息@Testpublic void test2(){String configLocation = "applicationContext.xml"; // ...

  10. selenium+java:获取列表中的值

    selenium+java:获取列表中的值 (2011-08-23 17:14:48) 标签: 杂谈 分类: selenium 初步研究利用java+testNg框架下写selenium测试用例,今天 ...

最新文章

  1. 「镁客·请讲」NOLO VR张道宁:空间定位技术加持下的VR,是可以搞出商业价值的...
  2. 四川大学计算机学院优秀毕业论文,四川大学本科生毕业论文设计评分标准.docx...
  3. Spring注意事项(各部分理解)
  4. 围绕HugeTLB的极致优化
  5. opencv 在工业中的应用:blob分析
  6. mssql 存储过程 group by 集合并逗号要开某字段
  7. pcie转sata3硬盘不启动_新品推荐:PCIe2.0转4口SATA3/6G扩展卡 SFF8087
  8. 采用UltraISO软碟通制作Dos启动盘教程
  9. 记录一次实战破解无线wifi——Aircrack-ng
  10. 哥本哈根大学物理学家研制的创新芯片解决了量子难题;高通风投投资量子机器公司 | 全球量子科技与工业快讯第四十二期
  11. Elastic 7.13.0 版重磅发布:在 Elastic 上搜索和存储更多数据
  12. 上传大文件报错413问题处理
  13. android倒影效果,Android实现图片的倒影效果案例分析
  14. python不显示边框_python设置表格边框的具体方法
  15. 计网考点——扩展的以太网
  16. 最高百万年薪,全国多家知名互联网/游戏公司热招 Cocos 人才丨9月岗位
  17. PHP配置连接MSSql数据库
  18. H264—帧,片,参数集,NALU等概念
  19. 2020华为校招面试机试题与参考答案解析
  20. h3csyslog_H3C syslog配置 -

热门文章

  1. CashFiesta 攻略
  2. 双非考研上岸中国传媒大学通信(电子信息)的一路历程(考研经验帖)
  3. 通过代理下载Google Code
  4. 使用npm和命令行强制删除文件
  5. Cardhop for Mac(通讯录管理软件)
  6. 华为Code Craft 2020 + ZTE 中兴捧月
  7. 10个技巧,帮你改进UI设计
  8. 最新ApkIDE少月版+JAVA环境变量一键配置软件合集
  9. 12个数据可视化工具,人人都能做出超炫图表
  10. 【服务器】Facebook如何处理海量图片存储