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)
posted @ 2021-06-16 19:44  小清澈  阅读(1509)  评论(0编辑  收藏  举报