Java识别获取pdf中文字信息
一、举例需求(拿较难的发票识别举例)
平时工作或者开发过程中如果遇到需要识别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中文字信息相关推荐
- Java识别获取pdf中文字信息(此方法任意pdf的信息都可以拿到)
一.举例需求(拿较难的发票识别举例) 平时工作或者开发过程中如果遇到需要识别pdf发票中信息的情况,如获取发票代码号码,开票日期,校验码等,比如下面的发票,项目中需要读取发票中信息 二.方法原理 使用 ...
- java解析pdf获取pdf中内容信息
java解析pdf获取pdf中内容信息 今日项目中需要将pdf中的数据获取到进行校验数据,于是前往百度翻来覆去找到以下几种办法,做个笔记,方便日后查询. 废话不多说,我要直接上代码装逼了 第一种 使用 ...
- java 图片识别提取_老司机帮您Java 提取/读取PDF中的图片
电脑现已成为我们工作.生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到Java 提取/读取PDF中的图片的问题,如果我们遇到了Java 提取/读取PDF中的图片的情况,该怎么处理怎么才能解决 ...
- java pdfbox读取pdf中的表格
java pdfbox读取pdf中的表格 目前遇到了需要解析pdf中表格的需求,遇到无法解析表格中的空格,求助大神帮助!!! <dependency><groupId>org. ...
- 报告上集 | 《认文识字·中文字信息精准化》报告
您好,欢迎关注<认文识字--中文字信息精准化>报告.我是安秀. 这里说的"中文字",是"中国文字"的简称,也就是我们常说的"汉字" ...
- 报告上、下集 |《认文识字●中文字信息精准化》
您好,欢迎关注<认文识字--中文字信息精准化>报告.我是安秀. 这里说的"中文字",是"中国文字"的简称,也就是我们常说的"汉字" ...
- Python 利用百度文字识别 API 识别并提取图片中文字
Python 利用百度文字识别 API 识别并提取图片中文字 利用百度 AI 开发平台的 OCR 文字识别 API 识别并提取图片中的文字.首先需注册获取 API 调用的 ID 和 key,步骤如下: ...
- C# 获取PDF中的数字签名证书
PDF中的加数字签名是对文档权威性的有效证明.我们在向PDF文档添加签名时,需要准备可信任的签名证书.同时,对已有的签名,可验证签名是否有效,也可以获取文档中的签名证书信息.下面,以C#代码示例展示如 ...
- spring五:获取容器中对象信息
// 获取容器中对象信息@Testpublic void test2(){String configLocation = "applicationContext.xml"; // ...
- selenium+java:获取列表中的值
selenium+java:获取列表中的值 (2011-08-23 17:14:48) 标签: 杂谈 分类: selenium 初步研究利用java+testNg框架下写selenium测试用例,今天 ...
最新文章
- 「镁客·请讲」NOLO VR张道宁:空间定位技术加持下的VR,是可以搞出商业价值的...
- 四川大学计算机学院优秀毕业论文,四川大学本科生毕业论文设计评分标准.docx...
- Spring注意事项(各部分理解)
- 围绕HugeTLB的极致优化
- opencv 在工业中的应用:blob分析
- mssql 存储过程 group by 集合并逗号要开某字段
- pcie转sata3硬盘不启动_新品推荐:PCIe2.0转4口SATA3/6G扩展卡 SFF8087
- 采用UltraISO软碟通制作Dos启动盘教程
- 记录一次实战破解无线wifi——Aircrack-ng
- 哥本哈根大学物理学家研制的创新芯片解决了量子难题;高通风投投资量子机器公司 | 全球量子科技与工业快讯第四十二期
- Elastic 7.13.0 版重磅发布:在 Elastic 上搜索和存储更多数据
- 上传大文件报错413问题处理
- android倒影效果,Android实现图片的倒影效果案例分析
- python不显示边框_python设置表格边框的具体方法
- 计网考点——扩展的以太网
- 最高百万年薪,全国多家知名互联网/游戏公司热招 Cocos 人才丨9月岗位
- PHP配置连接MSSql数据库
- H264—帧,片,参数集,NALU等概念
- 2020华为校招面试机试题与参考答案解析
- h3csyslog_H3C syslog配置 -