前几天在做应标方案,少不了从各种合同、验收文档中截取一下案例图片,试了半天也没找到合适的工具,从网上找python相关方案,最后选中了PyMuPDF,主要是好用,而且功能也听过,目前只实现了pdf转图片,pdf抽取文本两种功能,后续的有待再学习。
代码语言:javascript复制# pip install PyMuPDF
import datetime
import os
import fitz # 导入PyMuPDF
if __name__ == "__main__":
# 指定待转换的PDF文件路径和名称
pdfpathfile = 'Oracle分析函数.pdf'
# 指定储存图片的目录
imgpath = 'yyyy/'
pdftoimage(pdfpathfile, imgpath)
pdftotext(pdfpathfile, imgpath)
代码语言:javascript复制def pdftoimage(pdfpathfile, imagepath):
starttime = datetime.datetime.now() # 开始时间
pdfdoc = fitz.open(pdfpathfile) # Document('xxx.pdf'),返回Document对象
for pg in range(pdfdoc.pageCount): # 获取pdf页码
page = pdfdoc[pg]
rotate = int(0)
# 默认输出图片大小为:597*837, dpi=96
# 可通过zoom_x,zoom_y调整输出图片大小
# 如将图片输出为716*1256的分辨率
# 则zoom_x=716/597=1.2,zoom_y=1256/837=1.5
zoom_x = 1.2
zoom_y = 1.5
mat = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate) # 获取矩阵
pix = page.getPixmap(matrix=mat, alpha=False) # 形成位图
if not os.path.exists(imagepath): # 判断存放图片的文件夹是否存在
os.makedirs(imagepath) # 若图片文件夹不存在就创建
pix.writePNG(imagepath '/' 'images_%s.png' % pg) # 将位图写入指定文件名称内的图片中
endtime = datetime.datetime.now() # 结束时间
print('pdf转换image时间=', (endtime - starttime).seconds)
解析结果如下:
代码语言:javascript复制def pdftotext(pdfpathfile, imagepath):
starttime = datetime.datetime.now() # 开始时间
pdfdoc = fitz.open(pdfpathfile) # Document('xxx.pdf'),返回Document对象
for pg in range(pdfdoc.pageCount): # 获取pdf页码
page = pdfdoc[pg]
rotate = int(0)
doc = fitz.open(pdfpathfile) # open document
out = open(pdfpathfile ".txt", "wb") # open text output
for page in doc: # iterate the document pages
text = page.get_text().encode("utf8") # get plain text (is in UTF-8)
out.write(text) # write text of page
out.write(bytes((12,))) # write page delimiter (form feed 0x0C)
out.close()
endtime = datetime.datetime.now() # 结束时间
print('pdf转换text时间=', (endtime - starttime).seconds)
解析结果如下: