前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >关于PDF文件转图片、转文本

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

作者头像
python与大数据分析
发布2022-03-11 16:57:14
发布2022-03-11 16:57:14
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

前几天在做应标方案,少不了从各种合同、验收文档中截取一下案例图片,试了半天也没找到合适的工具,从网上找python相关方案,最后选中了PyMuPDF,主要是好用,而且功能也听过,目前只实现了pdf转图片,pdf抽取文本两种功能,后续的有待再学习。

代码语言:javascript
代码运行次数:0
运行
复制
# 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
代码运行次数:0
运行
复制
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
代码运行次数:0
运行
复制
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)

解析结果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python与大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档