Python实现获取PDF中的图片


背景是小舅子要想要截取PDF里面的图片。在网上找了一段代码,如下

import fitz

import re import os   file_path = r'C:\xxx\xxx.pdf' # PDF 文件路径 dir_path = r'C:\xxx' # 存放图片的文件夹   def pdf2image1(path, pic_path):   checkIM = r"/Subtype(?= */Image)"   pdf = fitz.open(path)   lenXREF = pdf._getXrefLength()   count = 1   for i in range(1, lenXREF):     text = pdf._getXrefString(i)     isImage = re.search(checkIM, text)     if not isImage:       continue     pix = fitz.Pixmap(pdf, i)     new_name = f"img_{count}.png"     pix.writePNG(os.path.join(pic_path, new_name))     count += 1     pix = None   pdf2image1(file_path, dir_path)   运行的时候报错 Decument 没有 _getXrefString 、_getXrefLength方法,然后网上没有找到解决办法,找我看了一下   然后去第三方库里面 fitz 里面看了一下 发现 _getXrefString 这个方法确实没有   然后理解了一下代码_getXrefLength 这个函数大概是获取PDF总页数 _getXrefString 这个是获取PDF对应页内容的 在fitz 库里面找到了实现这获取总页数的函数 和 一个替代函数  获取当前页的image 函数。如果当前页没有image返回null 分别是 xref_length 和 extract_image 然后改了一下代码,运行,发现  search 这里也报错 找到第三方库的这个函数,发现传参的时候,第二个参数是String类型的,而我替换的函数extract_image 返回的是个数组。所以 做了一下强转。修改后代码如下
# -*- coding: utf-8 -*-

import fitz
import re
import os

file_path = r'C:\Users\xxx\Desktop\新建文件夹\xxx.pdf' # PDF 文件路径
dir_path = r'C:\Users\xxx\Desktop\test' # 存放图片的文件夹

def pdf2image1(path, pic_path):
checkIM = r"image"
pdf = fitz.open(path)
lenXREF = pdf.xref_length()
count = 1
for i in range(1, lenXREF):
text = pdf.extract_image(i)
print(text)
isImage = re.search(checkIM, str(text))
if not isImage:
continue
pix = fitz.Pixmap(pdf, i)
new_name = f"img_{count}.png"
pix.writePNG(os.path.join(pic_path, new_name))
count += 1
pix = None

pdf2image1(file_path, dir_path)