基于Python轻松实现PDF转图片

 更新时间:2023年08月29日 14:08:44   作者:编程启航  
PDF文件是我们在日常工作和学习中常用的文档格式之一,但你知道吗,你可以将PDF文件转换为图像,让文档变得更加生动有趣,下面我们就来看看具体的实现方法吧

导语

PDF文件是我们在日常工作和学习中常用的文档格式之一,但你知道吗?你可以将PDF文件转换为图像,让文档变得更加生动有趣。或者是防止别人对你文档的复制粘贴。

本篇博客将为你详细介绍如何将PDF转换为图像,开启全新的文档阅读体验。

什么是PDF转图像

PDF转图像是一种将PDF文件的每一页内容转换为图像格式(如PNG、JPEG等)的处理方式。通过这种方式,你可以将静态的文档内容转化为生动的图像,防止别人对文字文档的复制粘贴,更易于与他人分享和呈现。

如何实现pdf转图像

使用pdf2image库

使用Python的pdf2image库,我们可以轻松实现PDF到图像的转换。

但需要注意的是:pdf2image 基于poppler-utils工具,它使用pdftoppm工具将PDF页面转换为图像。因此,在使用pdf2image之前,你需要确保已经安装了poppler-utils

from pdf2image import convert_from_path
def pdf_to_images(pdf_path, output_folder):
    pages = convert_from_path(pdf_path)
    for i, page in enumerate(pages):
        page.save(f'{output_folder}/page_{i + 1}.png', 'PNG')
pdf_path = 'your_pdf_file.pdf'
output_folder = 'output_images'
pdf_to_images(pdf_path, output_folder)

使用PyMuPDF库进行PDF转图像

另一个强大的工具是PyMuPDF库,它允许我们更加灵活地操作PDF并转换为图像。

具体版如下:

import datetime
import os
import fitz  # fitz就是pip install PyMuPDF
def pyMuPDF_fitz(pdfPath, imagePath):
    startTime_pdf2img = datetime.datetime.now()  # 开始时间
    print("imagePath=" + imagePath)
    pdfDoc = fitz.open(pdfPath)
    for pg in range(pdfDoc.pageCount):
        page = pdfDoc[pg]
        rotate = int(0)
        # 每个尺寸的缩放系数为1.3,这将为我们生成分辨率提高2.6的图像。
        # 此处若是不做设置,默认图片大小为:792X612, dpi=96
        zoom_x = 2  # (1.33333333-->1056x816)   (2-->1584x1224)
        zoom_y = 2
        mat = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
        pix = page.getPixmap(matrix=mat, alpha=False)
        if not os.path.exists(imagePath):  # 判断存放图片的文件夹是否存在
            os.makedirs(imagePath)  # 若图片文件夹不存在就创建
        pix.writePNG(imagePath + '/' + 'images_%s.png' % pg)  # 将图片写入指定的文件夹内
    endTime_pdf2img = datetime.datetime.now()  # 结束时间
    print('pdf2img时间=', (endTime_pdf2img - startTime_pdf2img).seconds)
if __name__ == "__main__":
    # 1、PDF地址
    pdfPath = r'../demo-scan.pdf'
    # 2、需要储存图片的目录
    imagePath = './imgs'
    pyMuPDF_fitz(pdfPath, imagePath)

简化版如下:

import fitz
def pdf_to_images(pdf_path, output_folder):
    pdf_document = fitz.open(pdf_path)
    for pg in range(pdf_document.page_count):
        page = pdf_document[pg]
        pix = page.get_pixmap(matrix=fitz.Matrix(2, 2))
        pix.save(f'{output_folder}/page_{pg + 1}.png')
pdf_path = 'your_pdf_file.pdf'
output_folder = 'output_images'
pdf_to_images(pdf_path, output_folder)

开启全新阅读体验

通过将PDF转换为图像,你可以在不同场景下获得更好的阅读体验。你可以将图像用于演示、分享到社交媒体,甚至用于个人学习笔记。

也可以防止别人直接复制你的成果。

两种方式对比

pdf2imagefitz(来自PyMuPDF库)都是用于在Python中处理PDF文件的工具。它们在功能和用法上有一些区别,以下是它们的主要区别和比较:

pdf2image:

功能特点:

pdf2image 是一个用于将PDF文件的页面转换为图像的Python库。它专注于将PDF页面转换为图像格式(如PNG、JPEG等),便于在其他应用中使用,如图像处理、OCR等。

依赖库:

pdf2image 基于poppler-utils工具,它使用pdftoppm工具将PDF页面转换为图像。因此,在使用pdf2image之前,你需要确保已经安装了poppler-utils

使用简单:

pdf2image 提供了直观的API,易于使用。它可以从PDF文件中提取指定页面并将其转换为图像,非常适合基本的PDF转图像需求。

示例代码:

from pdf2image import convert_from_path
images = convert_from_path('input.pdf')
for i, image in enumerate(images):
    image.save(f'page_{i + 1}.png', 'PNG')

fitz(PyMuPDF库):

功能特点:

fitzPyMuPDF 库的一部分,它是一个功能丰富的PDF处理库,支持阅读、编辑和转换PDF文档。除了转换为图像,fitz 还提供了许多其他PDF操作的功能,如文本提取、标注等。

独立性:

fitzPyMuPDF 库的一部分,它不需要依赖外部工具。这使得在没有安装poppler-utils的情况下,仍然可以使用 fitz 进行PDF操作。

更多灵活性:

fitz 不仅可以将PDF页面转换为图像,还可以对PDF文档进行更复杂的操作,如获取页面信息、文本提取、页面合并、旋转、裁剪等。因此,如果你需要更多关于PDF的操作,fitz 是一个更强大的选择。

示例代码:

import fitz
pdf_document = fitz.open('input.pdf')
page = pdf_document[0]
pix = page.get_pixmap(matrix=fitz.Matrix(2, 2))
pix.save('page_1.png')
pdf_document.close()

综上所述,如果你只需要将PDF页面转换为图像,pdf2image 是一个更简单的选择。而如果你需要更多PDF操作的灵活性,如文本提取、标注等,那么fitz(PyMuPDF)提供了更广泛的功能。选择合适的工具取决于你的具体需求。

到此这篇关于基于Python轻松实现PDF转图片的文章就介绍到这了,更多相关Python PDF转图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python提取PDF中的图片的实现示例

    Python提取PDF中的图片的实现示例

    本文主要介绍了Python提取PDF中的图片的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • python实现股票历史数据可视化分析案例

    python实现股票历史数据可视化分析案例

    股票交易数据分析可直观股市走向,对于如何把握股票行情,快速解读股票交易数据有不可替代的作用,感兴趣的可以了解一下
    2021-06-06
  • Python并发编程线程消息通信机制详解

    Python并发编程线程消息通信机制详解

    这篇文章主要为大家介绍了Python并发编程之线程消息通信机制的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • python用装饰器自动注册Tornado路由详解

    python用装饰器自动注册Tornado路由详解

    这篇文章主要给大家介绍了python用装饰器自动注册Tornado路由,文中给出了三个版本的解决方法,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • 决策树的python实现方法

    决策树的python实现方法

    这篇文章主要介绍了决策树的python实现方法,详细分析了决策树的优缺点及算法思想并以完整实例形式讲述了Python实现决策树的方法,具有一定的借鉴价值,需要的朋友可以参考下
    2014-11-11
  • Python内建类型float源码学习

    Python内建类型float源码学习

    这篇文章主要为大家介绍了Python内建类型float源码学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作

    pytorch中 gpu与gpu、gpu与cpu 在load时相互转化操作

    这篇文章主要介绍了pytorch模型载入之gpu和cpu互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 使用Matplotlib制作动态图的示例详解

    使用Matplotlib制作动态图的示例详解

    matplotlib是一个著名的python绘图库,由于其灵活强大的绘图功能使得在python中可视化变得非常容易,本文主要介绍了在matplotlib库中制作动态图的方法,需要的可以参考一下
    2023-06-06
  • Python实现读取Excel文件并复制指定的数据行

    Python实现读取Excel文件并复制指定的数据行

    这篇文章主要介绍了如何基于Python语言,读取Excel表格文件数据,并基于其中某一列数据的值,将这一数据处于指定范围的那一行加以复制,感兴趣的可以了解一下
    2023-07-07
  • 使用python批量化音乐文件格式转换的实例

    使用python批量化音乐文件格式转换的实例

    今天小编就为大家分享一篇使用python批量化音乐文件格式转换的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01

最新评论