序言:我们在读一些PDF版书籍的时候,如果PDF中不是图片,做起读书笔记的还好;如果PDF中的是图片的话,根本无法编辑,做起笔记来,还是很痛苦的。我是遇到过了。我们搞技术的,当然得自己学着解决现在的痛点。

一. 现状

为了不重复造轮子,当然得看看现在市面上是否有已经实现过的,如果有,那自然是拿来即用。

首先,说说一些在线版的PDF图片转文字,对文件大小有限制为2M(似乎有很多的文件处理都是限制在这个数),超过了便要收费了。

第二,那就是WPS的PDF图片转文字了。别说大小限制了,直接是收费。

二. 方案实现

2.1 百度AI平台 获取AppID, API Key, Secret Key

该平台限制调用次数, 作为个人开发者来说,基本上是够用了。

Java SDK文档使用说明: https://ai.baidu.com/docs#/OCR-Java-SDK/top

不清楚的,可以去看文档。

2.2 代码实现

逻辑思路: 读取PDF文件,然后读取PDF中包含的图片,将图片传给百度AI平台去进行识别,返回结果解析。

第一步:新建一个Demo的Maven工程

省略....(相信大家都会哈)

第二步:引入POM

<?xml version="1.0" encoding="UTF-8"?>4.0.0com.example demo 0.0.1-SNAPSHOTdemo Demo project for pdf图片转换文字 喜欢的微信关注公众号:Java技术干货 1.8com.baidu.aip java-sdk 4.8.0org.apache.pdfbox pdfbox-app 2.0.16

第三步:新建一个带有main方法的类

package com.example.demo;import com.baidu.aip.ocr.AipOcr;import org.apache.pdfbox.cos.COSName;import org.apache.pdfbox.pdmodel.*;import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;import org.apache.pdfbox.text.PDFTextStripper;import org.json.JSONObject;import javax.imageio.ImageIO;import java.awt.image.BufferedImage;import java.io.*;import java.nio.ByteBuffer;import java.text.SimpleDateFormat;import java.util.*;import java.util.concurrent.atomic.AtomicInteger;public class DemoApplication { //设置APPID/AK/SK public static final String APP_ID = "你的APP_ID"; public static final String API_KEY = "你的API_KEY"; public static final String SECRET_KEY = "你的SECRET_KEY "; public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";  /** * 解析pdf文档信息 * * @param pdfPath pdf文档路径 * @throws Exception */ public static void pdfParse(String pdfPath) throws Exception { InputStream input = null; File pdfFile = new File(pdfPath); PDDocument document = null; try { input = new FileInputStream(pdfFile); //加载 pdf 文档 document = PDDocument.load(input); /** 文档属性信息 **/ PDDocumentInformation info = document.getDocumentInformation(); System.out.println("标题:" + info.getTitle()); System.out.println("主题:" + info.getSubject()); System.out.println("作者:" + info.getAuthor()); System.out.println("关键字:" + info.getKeywords()); System.out.println("应用程序:" + info.getCreator()); System.out.println("pdf 制作程序:" + info.getProducer()); System.out.println("作者:" + info.getTrapped()); System.out.println("创建时间:" + dateFormat(info.getCreationDate())); System.out.println("修改时间:" + dateFormat(info.getModificationDate())); //获取内容信息 PDFTextStripper pts = new PDFTextStripper(); String content = pts.getText(document); System.out.println("内容:" + content); /** 文档页面信息 **/ PDDocumentCatalog cata = document.getDocumentCatalog(); PDPageTree pages = cata.getPages(); System.out.println(pages.getCount()); int count = 1; // 初始化一个AipOcr AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY); // 可选:设置网络连接参数 client.setConnectionTimeoutInMillis(2000); client.setSocketTimeoutInMillis(60000); for (int i = 0; i < pages.getCount(); i++) { PDPage page = (PDPage) pages.get(i); if (null != page) { PDResources res = page.getResources(); Iterable xobjects = res.getXObjectNames(); if(xobjects != null){ Iterator imageIter = xobjects.iterator(); while(imageIter.hasNext()){ COSName key = (COSName) imageIter.next(); if (res.isImageXObject(key)) { try { PDImageXObject image = (PDImageXObject) res.getXObject(key); BufferedImage bimage = image.getImage(); // 将BufferImage转换成字节数组 ByteArrayOutputStream out =new ByteArrayOutputStream(); ImageIO.write(bimage,"png

java 获取文件大小_利用百度AI OCR图片识别,Java实现PDF中的图片转换成文字相关推荐

  1. 利用百度AI开放平台识别干部培训网登录验证码

    先说能干啥能干啥,看视频. MyVideo_2 个人测试,百度AI平台验证码识别率还是很高的.下面是视频程序的源代码,欢迎跟大家进行交流. import datetime import json fr ...

  2. application实现网页计数_利用百度ai实现文本和图片审核

    之前做平台内容发布审核都是自己构建一套违禁词库,在代码中利用词库判断用户发布的内容,现在可以使用百度ai api完成这个功能.接下来就简单说下怎么做吧: 首先打开百度ai 开发平台 注册一个账号 进入 ...

  3. java 清空控制台_利用原生库和JNI(Java原生接口)实现H2数据库漏洞利用

    在H2数据库引擎中获取代码执行权限的技术早已是众所周知,但有个要求就是H2能够动态编译Java代码.而本文将向大家展示以前没有公开过的利用H2的方法,并且无需使用Java编译器,即通过原生库和JNI( ...

  4. java 获取文件大小_阿里Java后端开发面经,面试官都替我感到绝望

    点关注,不迷路:持续更新Java相关技术及资讯!!! 内容源于群友投稿!记录一次阿里Java后端开发面经,分享给大家,感谢支持! 前言 秋招面试的第一家公司,也是第一次面试,真的超级紧张,从自我介绍到 ...

  5. java 地图定位_利用百度地图进行定位

    1.引入地图js 2.js /** * 定位地区 * @author xiaohei 2019-05-14 */ function locateRegion(){ console.log('定位地区' ...

  6. java jmx 监控_利用VisualVm和JMX远程监控Java进程

    在前一篇文章里我们发现通过jstatd + VisualVm的方式,不能获得Java进程的CPU.线程.MBean信息,这时JMX就要登场了. 自Java 6开始,Java程序启动时都会在JVM内部启 ...

  7. java获取主板_如何统计主板插槽并通过java获取主板序列号?

    我认为Sigar尚未提供此类信息.但我们可以用另一种方式收集信息.我不知道如何获得MotherBoard插槽,但使用VBS(Window Script)可以很容易地获得MotherBoard序列号. ...

  8. 用pfx证书java双向认证_把CA证书生成的crt的证书和pem的私钥转换成java能够使用的keystore和pcks12的证书,实现https双向认证...

    最近在做一个https双向认证的工作,领导先让我实现,我之前写了一篇文章,把tomcat的生成证书和配置的实现写了出来. 现在领导给了我服务器的CA证书的客户端证书和私钥,服务端信任证书,分别是crt ...

  9. python批量爬取小网格区域坐标系_Python爬虫实例_利用百度地图API批量获取城市所有的POI点...

    上篇关于爬虫的文章,我们讲解了如何运用Python的requests及BeautifuiSoup模块来完成静态网页的爬取,总结过程,网页爬虫本质就两步: 1.设置请求参数(url,headers,co ...

最新文章

  1. 对Transformer、XLNet、 ALBERT、 CRF等技术仍然一知半解?再不学习就OUT了!
  2. 您是否敢更改HashMap实现?
  3. kafka key的作用_kafka系列(kafka端到端原理分析)
  4. Spring事务管理的demo
  5. java项目实现服务器监控,Java实现服务器状态监控
  6. 利用nginx-rtmp搭建视频点播、直播、HLS服务器
  7. 【数据结构之旅】循环队列
  8. python3.5.4安装_linux-centos系统下安装python3.5.4步骤
  9. 微信小程序引入 vant UI组件库
  10. 通过笔记本设置wifi共享
  11. 自制hdmi线一头改vga图_杀鸡取卵 | 破拆电脑VGA电缆获取收音机天线零件:双目铁氧体磁芯...
  12. 英语演讲常用连接词和句子
  13. 如何在Jupyter Notebook中编写R程序
  14. PHP处理iso8583报文
  15. 《通用版CISCO交换机配置命令及释义》——【全面、通用,含部分功能的注释】
  16. JavaScript数据数据类型判断
  17. 类脑计算:让人工智能走得更远
  18. sql中笛卡尔积现象以及运用
  19. ZYNQ RapidIO IP核协议与使用
  20. Firewalld防火墙实例配置

热门文章

  1. 组合数据类型,英文词频统计
  2. Java\学习——字符串
  3. HTML5 Geolocation(地理定位)
  4. 进入全屏 nodejs+express+mysql实现restful风格的增删改查示例
  5. SPOJ-New Distinct Substrings,注意会爆int
  6. Molile App(HTTP/HTML)—Record and Analyze Traffic
  7. java输入输出高速
  8. (转)Spring Boot (十四): Spring Boot 整合 Shiro-登录认证和权限管理
  9. (转)Arcgis for Js之鼠标经过显示对象名的实现
  10. 利用poi开源jar包操作Excel时删除行内容与直接删除行的区别