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)