利用python将图片版PDF转文字版PDF


Posted in Python onMay 03, 2019

图片版PDF无法复制,转化成文字版的PDF后使用更方便.

我们需要用到python3.6,pypdf2,ghostscript,PythonMagick,百度文字识别服务和pdfkit.

安装

安装python3.6 略

安装ghostscript

https://ghostscript.com/download/gsdnld.html

安装wkhtmltopdf

https://wkhtmltopdf.org/downloads.html

pip安装PyPDF2,ghostscript,baidu-aip,pdfkit

pip install PyPDF2
pip install ghostscript
pip install baidu-aip
pip install pdfkit

pip安装PythonMagick

https://www.lfd.uci.edu/~gohlke/pythonlibs/

cd 下载目录
pip install PythonMagick‑0.9.13‑cp36‑cp36m‑win_amd64.whl

pypdf2用于拆分和合并PDF

示例代码如下:

#导入PdfFileReader和PdfFileWriter
from PyPDF2 import PdfFileReader, PdfFileWriter
#获取一个pdf对象
pdf_input = PdfFileReader(open(r'pdf路径', 'rb'))
#获取pdf页数
page_count = pdf_input.getNumPages()
#获取pdf第四页的内容
page = pdf_input.getPage(3)
page['/Contents']
#获取一个pdfWriter对象
pdf_output = PdfFileWriter()
# 将一个 PageObject 加入到 PdfFileWriter 中
pdf_output.addPage(page)
#把新pdf保存
pdf_output.write(open(r'新pdf路径','wb'))

PythonMagick用于将单页PDF转化为jpg

百度云-文字识别-python SDK

每天有500次免费的识别
示例代码如下:

#导入baidu-aip
from aip import AipOcr
#https://console.bce.baidu.com/#/index/overview
#产品服务->人工智能->文字识别->创建应用
#获取以下三个值
APP_ID = '??'
API_KEY = '??'
SECRET_KEY = '?? '
#新建一个AipOcr
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
#读取本地图片的函数
def get_file_content(filePath):
  with open(filePath, 'rb') as fp:
    return fp.read()
#读取本地图片
image = get_file_content('p1.jpg')
#可选参数
options = {}
options["language_type"] = "CHN_ENG"
options["detect_direction"] = "true"
options["detect_language"] = "true"
options["probability"] = "true"
#通用文字识别
client.basicGeneral(image, options)

#读取网络图片
url = "https://note.youdao.com/yws/public/resource/1577071c1ffa2b6bf4e238ef6dbcfbf5/xmlnote/E5A19BEDFEBA4879B217C5BBF53B0245/22138"
#可选参数
options = {}
options["language_type"] = "CHN_ENG"
options["detect_direction"] = "true"
options["detect_language"] = "true"
options["probability"] = "true"
#通用文字识别
client.basicGeneralUrl(url, options)

#读取本地表格图片的函数
def get_file_content(filePath):
  with open(filePath, 'rb') as fp:
    return fp.read()
#读取本地表格图片
image = get_file_content('p2.jpg')
#可选参数
options = {}
options["language_type"] = "CHN_ENG"
options["detect_direction"] = "true"
options["detect_language"] = "true"
options["probability"] = "true"
#通用文字识别
client.basicGeneral(image, options)
#读取表格分割效果较差!

pdfkit用于利用字符串生成pdf
示例代码如下:

#pdfkit安装位置设置
path_wk = r'pdfkit安装位置设置'
pdfkit_config = pdfkit.configuration(wkhtmltopdf = path_wk)
#pdfkit参数
pdfkit_options = {'encoding': 'UTF-8',}
#制作PDF
pdfkit.from_string(('string'),'D:\test.pdf',configuration=pdfkit_config,options=pdfkit_options)

完整代码如下

#导入所需包

#os,操作文件和路径
import os
#ghostscript,代码简化
import ghostscript
#pypdf2,拆分pdf
from PyPDF2 import PdfFileReader, PdfFileWriter
#PythonMagick,单页PDF转图片
from PythonMagick import Image
#baidu-aip,百度文字识别
from aip import AipOcr
#pdfkit,字符串制作PDF
import pdfkit

#参数

path='??'
pdfname='??'
DPI='85'
#https://console.bce.baidu.com/#/index/overview
#产品服务->人工智能->文字识别->创建应用
#获取以下三个值
APP_ID = '??'
API_KEY = '??'
SECRET_KEY = '?? '
#pdfkit安装位置设置
path_wk = r'pdfkit安装位置设置'
pdfkit_config = pdfkit.configuration(wkhtmltopdf = path_wk)
#pdfkit参数
pdfkit_options = {'encoding': 'UTF-8',}

#PDF转化为图片

os.chdir(path)
pdf_input = PdfFileReader(open(pdfname, 'rb'))
#自动获取PDF页数
page_count = pdf_input.getNumPages()
page_range=range(page_count)
#也可以手工指定PDF需要转换的页数
#page_range=range(0,100)
#使用PyPDF和ghostscript
#==超级好用,超级直观,超级短==
for page_num in page_range:
  im = Image()
  im.density(DPI)
  im.read(pdfname + '[' + str(page_num) +']')
  im.write(str(page_num)+ '.jpg')

#图片转化为字符串

#新建一个AipOcr
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
#读取本地图片的函数
def get_file_content(filePath):
  with open(filePath, 'rb') as fp:
    return fp.read()
#可选参数
options = {}
options["language_type"] = "CHN_ENG"
options["detect_direction"] = "false"
options["detect_language"] = "false"
options["probability"] = "false"
allteststr=[]
for page_num in page_range:
  #读取本地图片
  image = get_file_content(r'%s\%s.jpg' % (path,page_num))
  #通用文字识别,得到的是一个dict
  testjson=client.basicGeneral(image, options)
  teststr=''
  for x in testjson['words_result']:
    teststr=teststr+x['words']+'</br>'
  allteststr.append(teststr)

#字符串写入PDF
for page_num in page_range:
  pdfkit.from_string((allteststr[page_num]),'%s.pdf' % (str(page_num)),configuration=pdfkit_config,options=pdfkit_options)
#合并单页PDF
pdf_output = PdfFileWriter()
for page_num in page_range:
  os.chdir(path)
  pdf_input = PdfFileReader(open('%s.pdf' % (str(page_num)), 'rb'))
  page = pdf_input.getPage(0)
  pdf_output.addPage(page)
pdf_output.write(open('newpdf.pdf','wb'))

以上就是为大家介绍的如何使用python3.6,pypdf2,ghostscript,PythonMagick,百度文字识别服务和pdfkit

Python 相关文章推荐
python 参数列表中的self 显式不等于冗余
Dec 01 Python
python中的编码知识整理汇总
Jan 26 Python
使用python调用zxing库生成二维码图片详解
Jan 10 Python
python 表达式和语句及for、while循环练习实例
Jul 07 Python
Python3使用turtle绘制超立方体图形示例
Jun 19 Python
Python多线程原理与用法详解
Aug 20 Python
python url 参数修改方法
Dec 26 Python
python标识符命名规范原理解析
Jan 10 Python
pip install 使用国内镜像的方法示例
Apr 03 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
Apr 22 Python
Python Merge函数原理及用法解析
Sep 16 Python
python 偷懒技巧——使用 keyboard 录制键盘事件
Sep 21 Python
Python3.0中普通方法、类方法和静态方法的比较
May 03 #Python
Python Flask框架模板操作实例分析
May 03 #Python
Python Flask框架扩展操作示例
May 03 #Python
Python安装Flask环境及简单应用示例
May 03 #Python
Python实现字典按key或者value进行排序操作示例【sorted】
May 03 #Python
Python3模拟curl发送post请求操作示例
May 03 #Python
零基础使用Python读写处理Excel表格的方法
May 02 #Python
You might like
BBS(php &amp; mysql)完整版(三)
2006/10/09 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
Laravel框架查询构造器简单示例
2019/05/08 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
js动态添加的DIV中的onclick事件简单实例
2016/07/25 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
jQuery的extend方法【三种】
2016/12/14 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
vue router 传参获取不到的解决方式
2019/11/13 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
手把手教你如何编译打包video.js
2020/12/09 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
python更新列表的方法
2015/07/28 Python
python实现简易数码时钟
2021/02/19 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
python修改linux中文件(文件夹)的权限属性操作
2020/03/05 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
HTML5地理定位实例
2014/10/15 HTML / CSS
印度尼西亚电子产品购物网站:Kliknklik
2018/06/05 全球购物
Python中pass语句的作用是什么
2016/06/01 面试题
史上最全面的Java面试题汇总!
2015/02/03 面试题
学习交流会主持词
2014/04/01 职场文书
2014年幼儿园园务工作总结
2014/12/05 职场文书
狮子林导游词
2015/02/03 职场文书
法院个人总结
2015/03/03 职场文书
三方合作意向书范本
2015/05/09 职场文书
何玥事迹观后感
2015/06/16 职场文书
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技