通过第三方类库 pymupdf 提取 PDF 文件中的图片

#fitz库是pymupdf中的一个模块
import fitz
import re
import os

pdf_path=r"E:\Work\华商\星展香港2018年中期報告.pdf"
img_save_path=r"E:\RPA_work\Work\PDF\资料"
# 使用正则表达式来查找图片
checkXO = r"/Type(?= */XObject)"
checkIM = r"/Subtype(?= */Image)"
# 打开pdf
doc = fitz.open(pdf_path)
# 图片计数
imgcount = 0
lenXREF = doc._getXrefLength()
for i in range(1, lenXREF):
    # 定义对象字符串
    text = doc._getXrefString(i)
    isXObject = re.search(checkXO, text)
    # 使用正则表达式查看是否是图片
    isImage = re.search(checkIM, text)
    # 如果不是对象也不是图片,则continue
    if not isXObject or not isImage:
        continue
    imgcount += 1
    # 根据索引生成图像
    pix = fitz.Pixmap(doc, i)
    # 根据pdf的路径生成图片的名称
    new_name = "img{}.png".format(imgcount)
    # 如果pix.n<5,可以直接存为PNG
    if pix.n < 5:
        pix.writePNG(os.path.join(img_save_path, new_name))
    # 否则先转换CMYK
    else:
        pix0 = fitz.Pixmap(fitz.csRGB, pix)
        pix0.writePNG(os.path.join(img_save_path, new_name))
        pix0 = None
    # 释放资源
    pix = None