利用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翻译软件实现代码(使用google api完成)
Nov 26 Python
Python中关键字is与==的区别简述
Jul 31 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
Apr 23 Python
Python3.5实现的罗马数字转换成整数功能示例
Feb 25 Python
Python内置random模块生成随机数的方法
May 31 Python
python flask搭建web应用教程
Nov 19 Python
python opencv实现gif图片分解的示例代码
Dec 13 Python
查看已安装tensorflow版本的方法示例
Apr 19 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
Apr 20 Python
Django表单提交后实现获取相同name的不同value值
May 14 Python
Python random模块的使用示例
Oct 10 Python
Python绘制散点图之可视化神器pyecharts
Jul 07 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
php 提速工具eAccelerator 配置参数详解
2010/05/16 PHP
php获取域名的google收录示例
2014/03/24 PHP
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
JavaScript TO HTML 转换
2006/06/26 Javascript
用js实现手把手教你月入万刀(转贴)
2007/11/07 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
2016/08/04 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
bootstrap table表格插件使用详解
2017/05/08 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
HTML5+JS+JQuery+ECharts实现异步加载问题
2017/12/16 jQuery
浅谈React的最大亮点之虚拟DOM
2018/05/29 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
Python协程的用法和例子详解
2017/09/09 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
python占位符输入方式实例
2019/05/27 Python
python 寻找离散序列极值点的方法
2019/07/10 Python
python打开使用的方法
2019/09/30 Python
pandas DataFrame运算的实现
2020/06/14 Python
python如何快速拼接字符串
2020/10/28 Python
python 如何在测试中使用 Mock
2021/03/01 Python
CSS3 二级导航菜单的制作的示例
2018/04/02 HTML / CSS
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
财务会计专业毕业生自荐信
2013/10/02 职场文书
学习型家庭事迹材料
2014/12/20 职场文书
公务员处分决定书
2015/06/25 职场文书
企业法律事务工作总结
2015/08/11 职场文书
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python
SpringBoot整合Minio文件存储
2022/04/03 Java/Android