利用python将图片版PDF转文字版PDF
作者:WDC 发布时间:2021-07-20 21:22:25
标签:python,PDF
图片版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'))
来源:https://blog.csdn.net/sqq513/article/details/79368243


猜你喜欢
- 学习目的 接触验证控件 昨天介绍了SQL SERVER插入数据,但是我们省略了验证输入这一步。以前的做法是用语句逐个判断输入的正确性,如是否
- keras中的Reshapekeras自带from keras.layers import Reshapelayer_1 = Reshape
- 前言值类型:所有像int、float、bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值
- Python的线程操作在旧版本中使用的是thread模块,在Python27和Python3中引入了threading模块,同时thread
- 下面给大家介绍远程连接mysql错误代码1130的解决方法:以上所述是小编给大家介绍的远程连接mysql错误代码1130的解决方法网站的支持
- 因为前端课要交一个大作业,刚好工作室的项目需要一个后台管理界面,就自学了一下vue,今天做了一个选项卡切换,最开始的作为菜鸡是用的js做的,
- 索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。在不使用ICP的情况
- 一、Background当想将照片序列合成延时摄影视频时,可能会发现照片中缺少一张,或者照片序列是跨时间、并不连续的,如图1所示,但PR中只
- 一、校验数字的表达式数字:^[0-9]*$n位的数字:^\d{n}$至少n位的数字:^\d{n,}$m-n位的数字:^\d{m,n}$零和非
- 前言:本篇文章基于卷积神经网络CNN,使用PyTorch实现MNIST数据集手写数字识别。一、PyTorch是什么?PyTorch 是一个
- vue+element中的表格,直接定位到指定的元素。需求:点击某一个节点,弹窗,直接定位到点击的节点,高亮并显示数据。<el-tab
- 阅读目录什么是前端代码异常 window.onerror写一个js报错的上报库注意点:缺点:在平时的工作,js报错是比较常见的一个
- 前言如果想分布式执行用例,用例设计必须遵循以下原则:1、用例之间都是独立的,2、用例a不要去依赖用例b3、用例执行没先后顺序,4、随机都能执
- 最近因工作需要,要在静态页面上实现分页,想了下,决定用AJAX来实现,所以就捣鼓了下面这么个东西,截图如下:更多关于分页的文章演示地址:ht
- MySQL5.0版本的安装图解教程是给新手学习的,当前mysql5.0.96是最新的稳定版本。mysql 下载地址 https://www.
- 最近在接触一个Django项目,使用的是fbv( function-base views )模式,看起来特别不舒服,项目中有一个模型类117
- 关于本地缓存1.wx.setStorage(wx.setStorageSync)、wx.getStorage(wx.getStorageSy
- MySQL从5.1.4版开始带有一个压力测试工具mysqlslap,通过模拟多个并发客户端访问mysql来执行测试,使用起来非常的简单。通过
- 如何开始 C#学习过程中有一集讲的是如何查看类图,看完视频后自己就学习如何在VS 2019中查看类图,但是找了好长时间都没有找到查看类图这
- 某日,路上收到用户咨询,为了清除空间,想删除某200多G大表数据,且已经确认此表不再有业务访问,于是执行了一条命令‘de