python成功将PDF文件转为图片,一次成功,不再踩坑!

网上有很多方法,但是包括PDF2image库、PyMupdf库等。

在摸索过程中我发现pdf的解析可以分为两种:
1、标准的PDF文件
表现在字体清晰、无畸变。这类PDF文件是通过word等格式编辑好转换的,可以通过某些包直接提取其中的表格、文字等。是一种比较好处理的。
2、非标准的PDF文件
表现在字体模糊、存在畸变。我怀疑这类PDF是通过图片转换得到的。它和标准PDF文件长得很像,但如果你要提取其中的信息,通过解析PDF文本会得到一片空白!!因为它本质属于PDF一张图片,因此需要通过提取PDF中图片的方式,而不是提取文本或表格。

今天主要解决pymupdf库的问题。在pymupdf这个库上我参考了很多人的代码,但是无论如何都显示缺少文件。

其实很很可能是pymupdf版本不同。
通常使用pip install pymupdf会下载最新的版本,我当前默认下载的版本是1.20.0。
import fitz
运行会报错。

我这里使用

pip install pymupdf==1.18.17 -i https://pypi.tuna.tsinghua.edu.cn/simple

下载1.18.17版本的pymupdf,使用python3.8
运行如下代码

import fitz
import re
import os

file_path = r'pdf/yourpdf.pdf'  # PDF 文件路径
dir_path = r'imgs'  # 存放图片的文件夹
def pdf2image1(path, pic_path):
    checkIM = r"/Subtype(?= */Image)" # 正则表达式
    pdf = fitz.open(path)
    lenXREF = pdf.xref_length() # 最新fitz库是没有._getXrefLength()
    count = 1
    for i in range(1, lenXREF):
        text = pdf.xref_object(i)# 最新fitz库是没有.getObjectString()
        isImage = re.search(checkIM, text)
        if not isImage:
            continue
        pix = fitz.Pixmap(pdf, i)
        if pix.size < 10000:  # 在这里添加一处判断一个循环
            continue  # 不符合阈值则跳过至下
        new_name = f"img_{count}.png"
        pix.writePNG(os.path.join(pic_path, new_name))
        count += 1
        pix = None



pdf2image1(file_path, dir_path)

可以正常提取pdf中的图片

你可能感兴趣的:(python,开发语言)