zoukankan      html  css  js  c++  java
  • 第一节:python提取PDF文档中的图片

    由于项目需要将PDF文档当中的图片转换成图片,所以参考了这篇文章https://blog.csdn.net/qq_15969343/article/details/81673302后项目得以解决。

    1、安装第三方类库pymupdf:pip install pymupdf

    2、安装完成后直接上代码,代码如下:

    import fitz
    import time
    import re
    import os
    def pdf2pic(path, pic_path):
        t0 = time.clock()                          # 生成图片初始时间
        checkXO = r"/Type(?= */XObject)"           # 使用正则表达式来查找图片
        checkIM = r"/Subtype(?= */Image)"
        doc = fitz.open(path)                      # 打开pdf文件
        imgcount = 0                               # 图片计数
        lenXREF = doc._getXrefLength()             # 获取对象数量长度
        
        # 打印PDF的信息
        print("文件名:{}, 页数: {}, 对象: {}".format(path, len(doc), lenXREF - 1))
        
        # 遍历每一个对象
        for i in range(1, lenXREF):
            text = doc._getXrefString(i)            # 定义对象字符串
            isXObject = re.search(checkXO, text)    # 使用正则表达式查看是否是对象
            isImage = re.search(checkIM, text)      # 使用正则表达式查看是否是图片
            if not isXObject or not isImage:        # 如果不是对象也不是图片,则continue
                continue
            imgcount += 1
            pix = fitz.Pixmap(doc, i)               # 生成图像对象
            new_name = "图片{}.png".format(imgcount) # 生成图片的名称
            if pix.n < 5:                           # 如果pix.n<5,可以直接存为PNG
                pix.writePNG(os.path.join(pic_path, new_name))
            else:                                   # 否则先转换CMYK
                pix0 = fitz.Pixmap(fitz.csRGB, pix)
                pix0.writePNG(os.path.join(pic_path, new_name))
                pix0 = None
            pix = None                              # 释放资源
            t1 = time.clock()                       # 图片完成时间
            print("运行时间:{}s".format(t1 - t0))
            print("提取了{}张图片".format(imgcount))
            
    if __name__=='__main__':
        path = r"C:UserslenovoDesktop数据.pdf"
        pic_path = r'C:UserslenovoDesktop图片'
        # 创建保存图片的文件夹
        if os.path.exists(pic_path):
            print("文件夹已存在,不必重新创建!")
            pass
        else:
            os.mkdir(pic_path)
        pdf2pic(path, pic_path)
    

    3、运行结果

    文件名:C:UserslenovoDesktop数据.pdf, 页数: 51, 对象: 156
    运行时间:1.0037559488187855s
    提取了1张图片
    运行时间:1.9240614402553362s
    提取了2张图片
    运行时间:2.8580821293209087s
    提取了3张图片
    运行时间:3.59311390384999s
    提取了4张图片
    运行时间:4.055301359322903s
    提取了5张图片
    运行时间:4.861761705280556s
  • 相关阅读:
    Security headers quick reference Learn more about headers that can keep your site safe and quickly look up the most important details.
    Missing dollar riddle
    Where Did the Other Dollar Go, Jeff?
    proteus 与 keil 联调
    cisco router nat
    router dhcp and dns listen
    配置802.1x在交换机的端口验证设置
    ASAv931安装&初始化及ASDM管理
    S5700与Cisco ACS做802.1x认证
    playwright
  • 原文地址:https://www.cnblogs.com/zhaco/p/10654956.html
Copyright © 2011-2022 走看看