关于PDF文件转图片、转文本

2022-03-11 16:57:14 浏览数 (1)

前几天在做应标方案,少不了从各种合同、验收文档中截取一下案例图片,试了半天也没找到合适的工具,从网上找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)

解析结果如下:

0 人点赞