1现有解析pdf的方法
使用org.apache.pdfbox读取pdf,只能读取pdf中的文字,有些纸件扫描成的pdf文字会错乱,有些字还是图片的方式显示的,导致读取的内容不全,常常会获取不到想要的数据。

2 OCR文字识别
pdf需要转换为图片,进行识别,识别率高。

2.1 调用百度接口
优点:识别率高,识别速度快

缺点:按次收费

2.2 使用开源工具读取pdf文档
2.2.1 下载工具包
https://github.com/tesseract-ocr/tessdata 下载chi_sim.traineddata,chi_sim_vert.traineddata

2.2.2 添加依赖

<dependencies><dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>4.4.0</version></dependency></dependencies>

2.2.3 编写程序

import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
public class TestTess {public static void main(String[] args) {// 识别图片的路径(修改为自己的图片路径)String path = "C:\\work\\notebook\\prototype\\target\\qq1.jpg";// 语言库位置(修改为跟自己语言库文件夹的路径)// String lagnguagePath = "C:\\work\\projects\\tess\\resources\\tessdata";File file = new File(path);ITesseract instance = new Tesseract();//设置训练库的位置//instance.setDatapath(lagnguagePath);//chi_sim :简体中文, eng    根据需求选择语言库instance.setLanguage("chi_sim");String result = null;try {long startTime = System.currentTimeMillis();result =  instance.doOCR(file);long endTime = System.currentTimeMillis();System.out.println("Time is:" + (endTime - startTime) + " 毫秒");} catch (TesseractException e) {e.printStackTrace();}System.out.println("result: ");System.out.println(result);                 }
}

2.3 读取pdf的特定位置的数据
2.3.1 手动截取pdf指定矩形区域的材料
需要前端配合做页面,改成自动获取,这样增加文档类型时,需要配置一下。

2.3.2 Python程序获取图片标识区域在整个文档中的矩形坐标

import aircv
def matchImg(imgsrc, imgobj, confidence=0.2):"""图片对比识别imgobj在imgsrc上的相对位置(批量识别统一图片中需要的部分):param imgsrc: 原始图片路径(str):param imgobj: 待查找图片路径(模板)(str):param confidence: 识别度(0<confidence<1.0):return: None or dict({'confidence': 相似度(float), 'rectangle': 原始图片上的矩形坐标(tuple), 'result': 中心坐标(tuple)})"""imsrc = aircv.imread(imgsrc)imobj = aircv.imread(imgobj)match_result = aircv.find_template(imsrc, imobj,confidence)  # {'confidence': 0.5435812473297119, 'rectangle': ((394, 384), (394, 416), (450, 384), (450, 416)), 'result': (422.0, 400.0)}if match_result is not None:match_result['shape'] = (imsrc.shape[1], imsrc.shape[0])  # 0为高,1为宽return match_result
template = {'address':'dz.jpg','doc_num':'fw.jpg','doc_type':'fwlx.jpg','issue_date':'fwrq.jpg','int_cls': 'splb.jpg','apply_num':'sqh.jpg','applyer':'sqr.jpg','content':'zw.jpg'}
for key, value in template.items():orig = matchImg("target/qq.jpg","target/"+value)rect = orig['rectangle']w = rect[3][0] - rect[0][0]h = rect[3][1] - rect[0][1]x = rect[0][0]y = rect[0][1]ret = [x,y,w,h]print(key,ret)

2.3.3 Java程序根据矩形区域坐标,获取指定位置信息

package odysssey.tess;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.imageio.ImageIO;
import java.awt.Rectangle;
import net.sourceforge.tess4j.ITessAPI.TessPageIteratorLevel;
import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
public class TestTess {public static void main(String[] args) throws IOException {// 识别图片的路径(修改为自己的图片路径)String path = "C:\\work\\notebook\\prototype\\target\\qq.jpg";// 语言库位置(修改为跟自己语言库文件夹的路径)// String lagnguagePath = "C:\\work\\projects\\tess\\resources\\tessdata";File file = new File(path);ITesseract instance = new Tesseract();//设置训练库的位置/*address [61, 312, 734, 82]doc_num [1002, 338, 527, 78]doc_type [425, 736, 801, 82]issue_date [64, 593, 495, 64]int_cls [115, 969, 346, 82]apply_num [676, 589, 388, 68]applyer [72, 450, 481, 68]content [107, 899, 1439, 70]*/    int rects[][] = {{61, 312, 734, 82},{1002, 338, 527, 78},{425, 736, 801, 82},{64, 593, 495, 64},{115, 969, 346, 82},{676, 589, 388, 68},{72, 450, 481, 68},{107, 899, 1439, 70}};//chi_sim :简体中文, eng    根据需求选择语言库instance.setLanguage("chi_sim");instance.setTessVariable("user_defined_dpi", "96");String result = null;try {long startTime = System.currentTimeMillis();//result =  instance.doOCR(file);for(int i = 0 ;i < rects.length;i++){Rectangle rr = new Rectangle(rects[i][0],rects[i][1],rects[i][2],rects[i][3]);result =instance.doOCR(file, rr);System.out.println(result);                 }/*       List<Rectangle> resul=instance.getSegmentedRegions(ImageIO.read(file), TessPageIteratorLevel.RIL_SYMBOL);for (int i = 0; i < resul.size(); i++) {Rectangle rect = resul.get(i);System.out.println(String.format("Box[%d]: x=%d, y=%d, w=%d, h=%d", i, rect.x, rect.y, rect.width, rect.height));}*/     long endTime = System.currentTimeMillis();System.out.println("Time is:" + (endTime - startTime) + " 毫秒");} catch (TesseractException e) {e.printStackTrace();}}
}

OCR识别PDF文件相关推荐

  1. python ocr 识别中文pdf_pytesseract识别PDF文件中的文字(OCR)

    前言:由于要利用一些比较老的文献中的数据,手工输入费时费力,于是乎找到了下面的方法.如果不差钱可以使用Adobe Acrobat Reader中的文字识别,也可以尝试其中的试用版.下面的方法完全室开源 ...

  2. OCR识别PDF乱码问题解决

    一.pdf转换后乱码的原因 pdf是一种可靠的文档传递格式,以Post语言文字模型为基础,不受操作系统和软件的影响,在每个设备上都能呈现出文件原始的面貌. pdf文件本身并不具有文字编辑功能,目前pd ...

  3. 对扫描的pdf文件生成目录

    很多pdf文件是直接扫描生成的,于是它的内容都是一张张的图片,当然就更没有目录索引了. 有的时候想找某些内容,只能一点点的移动滚动条,非常不方便. 那么有什么方法能生成目录呢? 方法一:使用福昕pdf ...

  4. mactxt文件如何转换成html,最佳的用于Mac上的PDF文件转换到HTML文件的转换器

    您是否正在寻找一种在Mac上将PDF文件转换为HTML文件的方法?您经常因为这个情况感到苦恼吗?有许多在线服务和桌面应用程序都可以帮助您将PDF文件转换为HTML文件.市面上有几款不同的PDF转换软件 ...

  5. 安利几个小妙招教你如何快速翻译PDF文件

    相信大家在网上查阅外国资料的时候,会发现很多网站上的资料都是以PDF的文件格式呈现的,这对外语好的小伙伴肯定就没啥影响,但是对于我们这种半吊子来说可就不友好了啊.大多数时候只能一点一点码字翻译,简直浪 ...

  6. 如何用pdf转换器快速转换PDF文件

    迅捷PDF转换器是一款专业的PDF转换软件,有了这款转换工具,大家可以很轻松地把不可编辑的PDF文档转换成可编辑的常用文档(Word.Excel.PPT)等,更好地保存文档文本.图像.编排,方便编辑使 ...

  7. 使用CAJViewer截取PDF文件里的文字和图片

    在阅读PDF文件或caj文件时,常常需要截取或摘录里面的部分文字和图片,这时就可以使用CAJViewer. 1.下载并安装CAJViewer软件 地址:http://cajviewer.cnki.ne ...

  8. 新窗口打开vue项目中的静态pdf文件,并做权限控制

    问题:公司系统做安全测试,其中一个问题是没有登录的情况下,直接访问 "项目地址/operate.pdf "此地址,会展示pdf文件. 描述:点击系统内的一个按钮会打开新窗口展示系统 ...

  9. 基于Python的离线OCR图片文字识别(三)——支持PDF文件

    前面第一个版本实现了基本的ocr功能,可以对某图像文件进行处理,将ocr结果以同名txt文件的方式保存在图像文件同路径下: 然后在第二个版本中又实现了对文件夹参数的支持,也即可以对某个包含大量图像文件 ...

最新文章

  1. 我的linux Mint之路(三)
  2. FileUpload控件实现单按钮图片自动上传并带预览显示
  3. lda 吗 样本中心化 需要_机器学习 —— 基础整理(四):特征提取之线性方法——主成分分析PCA、独立成分分析ICA、线性判别分析LDA...
  4. Python基础概念_6_模块
  5. 04-课后作业1-字符串加密
  6. PHP实现9x9乘法表
  7. P2860 [USACO06JAN]冗余路径Redundant Paths
  8. 深度学习之TensorFlow 第三章基本开发步骤--以逻辑回归拟合二维数据为例(转)
  9. cf-#189-div 2
  10. Git只获取部分目录的内容
  11. Flume OG 与 Flume NG 的对比
  12. 调用DLL找不到函数名或者函数乱码问题
  13. 解决LDAP客户端统一认证DirectoryEntry出现 Ox80005000的问题
  14. 调试经验——用XML格式定义Excel (.xls格式)文件 (XML Spreadsheet format in Excel)
  15. 顾客价值理论(转载)
  16. 中国电信翼支付网关接口接入
  17. 使用python基于socket的tcp服务器聊天室
  18. 1051: 电报加密
  19. 简单的纯JS小游戏--消灭星星
  20. 计算流体力学 有限体积法

热门文章

  1. 计算电磁学——变分问题
  2. Java使用POI写(创建)Excel
  3. linux系统安装smb服务,Linux 搭建Samba(共享)服务
  4. python画素描画
  5. windows7 防火墙关于文件共享的设置
  6. 广州物流展-2022广州国际电子商务及物流包装展览会
  7. Flutter 项目实战 Dio网络请求 四
  8. Python画海绵宝宝、小猪佩奇、皮卡丘
  9. VLSI芯片电路测试分类testMode、模式、时钟复位输入输出
  10. 一直以来电脑只是在不断模拟人类的潜意识部分 - 思维部分就是电脑实现人工智能的目标