python将PDF文件转换为图片

二、基于 fitz 库和正则搜索提取图片

fitz 库是 pymupdf 中的一个模块,用它来提取 pdf 里的图片非常方便。

安装命令

pip install fitz 

pip install pymupdf

三、代码实现

导入相关包

import fitz

import re

import os

读取 pdf 提取图片,并存储

import fitz

import time

import re

import os

def pdf2pic(path, pic_path):

    t0 = time.process_time()                          # 生成图片初始时间

    checkXO = r"/Type(?= */XObject)"           # 使用正则表达式来查找图片

    checkIM = r"/Subtype(?= */Image)"

    doc = fitz.open(path)                      # 打开pdf文件

    imgcount = 0                               # 图片计数

    lenXREF = doc.xref_length()             # 获取对象数量长度

     

    # 打印PDF的信息

    print("文件名:{}, 页数: {}, 对象: {}".format(path, len(doc), lenXREF - 1))



    # 遍历每一个对象

    for i in range(1, lenXREF):

        text = doc.xref_object(i)           # 定义对象字符串

        isXObject = re.search(checkXO, text)    # 使用正则表达式查看是否是对象

        isImage = re.search(checkIM, text)      # 使用正则表达式查看是否是图片

        if not isXObject or not isImage:        # 如果不是对象也不是图片,则continue

            continue

        imgcount += 1

        pix = fitz.Pixmap(doc, i)               # 生成图像对象

        new_name = "图片{}.png".format(imgcount) # 生成图片的名称

        if pix.n < 5:                           # 如果pix.n<5,可以直接存为PNG

            pix.save(os.path.join(pic_path, new_name))

        else:                                   # 否则先转换CMYK

            pix0 = fitz.Pixmap(fitz.csRGB, pix)

            pix0.save(os.path.join(pic_path, new_name))

            pix0 = None

        pix = None                              # 释放资源

        t1 = time.perf_counter()                   # 图片完成时间

        print("运行时间:{}s".format(t1 - t0))

        print("提取了{}张图片".format(imgcount))

         

if __name__=='__main__':

    path = r"D:\python脚本\XX.pdf"

    pic_path = r'D:\python脚本\图片'

    # 创建保存图片的文件夹

    if os.path.exists(pic_path):

        print("文件夹已存在,不必重新创建!")

        pass

    else:

        os.mkdir(pic_path)

    pdf2pic(path, pic_path)

运行结果

四、小结

Python 中 pdf2image 库也可以完成以上需求,它的好处是如果你的 pdf 页面较多时,pdf2image 可以启动多线程会大大加快转换速度,具体可参考 pdf2image 官方文档。

最后,可能会遇到提取的图片比原本少,或者提取出不想要的图片。可以通过检查图片格式,可能不是常见的格式,提取时再减少或添加过滤条件进行尝试

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要将PDF文件转换为DOCX文件,您可以使用Python的“pdfminer”和“python-docx”库。您需要安装这些库,然后按照以下步骤进行操作: 1. 导入所需的库: ```python import io import os import docx from pdfminer.converter import TextConverter from pdfminer.pdfinterp import PDFPageInterpreter from pdfminer.pdfinterp import PDFResourceManager from pdfminer.pdfpage import PDFPage ``` 2. 创建一个函数来将PDF文件转换为文本: ```python def pdf_to_text(pdf_file): resource_manager = PDFResourceManager() text_stream = io.StringIO() codec = 'utf-8' laparams = pdfminer.layout.LAParams() converter = TextConverter(resource_manager, text_stream, codec=codec, laparams=laparams) interpreter = PDFPageInterpreter(resource_manager, converter) password = "" maxpages = 0 caching = True page_nums = set() for page in PDFPage.get_pages(pdf_file, page_nums, maxpages=maxpages, password=password, caching=caching, check_extractable=True): interpreter.process_page(page) converter.close() text = text_stream.getvalue() text_stream.close() return text ``` 3. 创建一个函数来将文本转换为DOCX文件: ```python def text_to_docx(text, output): doc = docx.Document() doc.add_paragraph(text) doc.save(output) ``` 4. 最后,您可以将上面的两个函数组合在一起来实现转换: ```python pdf_file = open('example.pdf', 'rb') text = pdf_to_text(pdf_file) pdf_file.close() output = 'example.docx' text_to_docx(text, output) ``` 以上代码中,我们将PDF文件“example.pdf转换为文本,然后将文本转换为DOCX文件“example.docx”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

youyouxiong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值