使用Python将PDF文件转存为图片的代码示例

 更新时间:2023年09月28日 09:42:27   作者:艾派森  
因工作中的某些奇葩要求,需要将PDF文件的每页内容转存成按顺序编号的图片,用第三方软件或者在线转换也可以,但批量操作还是Python方便,所以本文给大家介绍了使用Python将PDF文件转存为图片的方法,需要的朋友可以参考下

一、Python处理PDF

  • Python处理PDF的好处

  1. 自动化和批量处理:使用Python,你可以自动处理大量的PDF文件,例如从扫描仪生成的文档、报告、合同等。这可以节省大量时间和努力,尤其是在需要重复性任务时。

  2. 文本提取:Python可以轻松地从PDF中提取文本内容,使其可搜索、可编辑和可分析。这对于文本分析、数据挖掘和文档检索等任务非常有用。

  3. 报告生成:你可以使用Python创建自定义的PDF报告,将数据、图表和图像等信息以专业的方式呈现。这对于生成自动化的业务报告、数据可视化和数据分析很有帮助。

  4. PDF编辑:Python库和工具使你能够合并、拆分、旋转、裁剪和编辑PDF文件的页面。这对于在不使用专业PDF编辑软件的情况下进行简单的文档编辑很有用。

  5. 图像提取:Python允许你从PDF文件中提取图像,这对于处理包含图形、图表和图片的文档非常有帮助。

  6. 数据提取:当PDF文件包含表格或结构化数据时,Python可以用于提取和转换这些数据,以便进一步分析或导入到数据库中。

  7. 自定义处理:Python提供了多种用于PDF处理的库,允许你根据项目的需求进行自定义处理。你可以选择适合你需求的库,以满足具体要求。

  8. 跨平台:Python是跨平台的,因此你可以在不同操作系统上运行相同的代码,而无需担心兼容性问题。

Python处理PDF文件的主要第三方库包括:

  1. PyPDF2:PyPDF2是一个用于处理PDF文件的库,可以用于提取文本、合并、拆分和旋转PDF文件的页面。它还支持添加页面、水印和书签等功能。

  2. ReportLab:ReportLab是一个用于创建PDF文件的库,允许你以编程方式构建PDF文档,包括添加文本、图像、表格等。

  3. PDFMiner:PDFMiner是一个用于提取文本和元数据的PDF处理库。它可以解析PDF文件并提取文本、布局信息和链接等。

  4. pdf2image:pdf2image是一个用于将PDF文件转换为图像的库,这对于处理包含图形的PDF文件非常有用。

  5. fpdf2:fpdf2是一个用于创建PDF文件的库,支持自定义字体、图像和表格等。

  6. PyMuPDF:PyMuPDF是一个用于处理PDF文件的库,可以用于提取文本、图像和元数据。它还支持PDF文件的渲染和转换为图像。

  7. Camelot:Camelot是一个用于提取表格数据的库,特别适用于从PDF文件中提取表格数据。

  8. Tabula-py:Tabula-py是一个用于提取表格数据的库,可将PDF中的表格转换为DataFrame对象。

  • 开发环境

操作系统:使用windows, mac都可以

Python版本:系统中需要安装Python3.6以上的版本,Python2已经过期不建议使用,Python3.6以前的版本功能相对弱,最好就是采用Python3.6以上的版本

开发工具:有两个可以选择,jupyter notebook,是个网页编辑器,可以运行Python,常常用于交互性、探索性的开发;pycharm,用于成熟脚本,或者web服务的一些开发;这两个工具可以随意选择。

二、用Python将PDF文件转存为图片

技术工具:

Python版本:3.9

代码编辑器:jupyter notebook

因工作中的某些奇葩要求,需要将PDF文件的每页内容转存成按顺序编号的图片。用第三方软件或者在线转换也可以,但批量操作还是Python方便,所谓搞定办公自动化,Python出山,一统天下;Python出征,寸草不生~ 

不过这个需要用到`PyMuPDF`库,电脑运行cmd,输入“pip install PyMuPDF”安装即可。安装后通过`import fitz`导入模块。等等,为什么安装的是`PyMuPDF`,导入的是`fitz`?俺`PyMuPDF`就是这么任性,怎么的,爱用不用!哈哈,开个玩笑。其实是因为`PyMuPDF`曾用名`fitz-python`,所以只是`fitz`换了个马甲而已。

这里先导入`fitz`库,用于将PDF文件的页面提取成像素信息(图片)。再导入`glob`库,用于获取后缀为".pdf"的文件的文件名。`os`库可新建文件夹。

#批量将PDF文件转为图片
import fitz
import glob
import os
image_path = "图片\\" #存放图片的文件夹
PDFfiles = glob.glob("PDF文件\\*.pdf") #获取所有pdf文件的文件名
for PDFfile in PDFfiles: #遍历所有PDF文件
    PDFdoc = fitz.open(PDFfile) #读取PDF文件
    folder_name = PDFfile.split("\\")[-1].split(".")[0] #按源文件名新建文件夹
    for pg in range(PDFdoc.pageCount): #根据PDF的页数,按页提取图片        
        page = PDFdoc[pg]
        #增强图片分辨率
        zoom_x = 3 #水平方向
        zoom_y = 3 #垂直方向
        mat = fitz.Matrix(zoom_x, zoom_y) 
        pix = page.getPixmap(matrix=mat)  
        #按原PDF名称新建文件夹并按顺序保存图片
        if not os.path.exists(image_path+folder_name):#判断文件夹是否已存在
            os.makedirs(image_path+folder_name)#不存在则新建,存在就跳过这行
        pix.writeImage(image_path+folder_name + "\\{}.png".format(str(pg+1))) #按PDF中的页面顺序命名并保存图片

以上,我们先将所有待处理的PDF文件放入“PDF文件夹”,然后通过`glob.glob("PDF文件\\*.pdf")`搜索并抓取所有以".pdf"为后缀的文件,并存入变量`PDFfiles`中。结果如下所示:

PDFfiles

然后,遍历`PDFfiles`中的所有PDF文件,使用`fitz.open()`读取。`fitz.open()`用于创建PDF文件中页面的像素映射(pixel maps),即用像素来表示页面信息。然后按PDF文件名命名一个新的文件夹,以便储存图片。比如给“收货记录.pdf”文件建一个名字为“收货记录”的文件夹,专门储存关于它的页面的图片。随后用`for`循环,根据PDF的页数,按页提取图片。将每页的信息存入`page`变量,它的type 是`fitz.fitz.Page`,即一页像素文件。

为了让图片看起来更清晰,需要增强图片的分辨率,设定图片水平及垂直方向的增强倍数,传入`Matrix`。`Matrix`用于提升即将保存的图片的分辨率,分辨率的提升倍数为`zoom_x`与`zoom_y`的乘积。倍数越大,图片越清晰,当然占用空间也越大。这个参数可根据实际要求调整。然后将`Matrix`存入`mat`,传入`getPixmap()`。`getPixmap()`用于控制图片分辨率、色域(比如生成灰度图像或带有减色方案的图像)、透明度、旋转、镜像、移位、剪切等。由于其它都不需要专门设定,所以只增强其分辨率。 

一页图片处理好后,就需要保存图片了。先通过`os.path.exists`判断一下需要的文件夹是否存在,若不存在就通过`os.makedirs`创建。然后用`pix.writeImage`按页码编号写入并保存图片。

以上就是使用Python将PDF文件转存为图片的代码示例的详细内容,更多关于Python将PDF文件转存为图片的资料请关注脚本之家其它相关文章!

相关文章

  • Python中元组的基础介绍及常用操作总结

    Python中元组的基础介绍及常用操作总结

    元组是一种不可变序列。元组变量的赋值要在定义时就进行,这就像C语言中的const变量或是C++的引用,定义时赋值之后就不允许有修改。元组存在的意义是:元组在映射中可以作为键使用,因为要保证键的不变性。元组作为很多内置函数和方法的返回值存在
    2021-09-09
  • Python中json.dumps()和json.dump()的区别小结

    Python中json.dumps()和json.dump()的区别小结

    在Python中,json.dumps()和json.dump()是两个常用的函数,本文主要介绍了Python中json.dumps()和json.dump()的区别小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • 在Python中如何优雅地创建表格的实现

    在Python中如何优雅地创建表格的实现

    本文主要介绍了在Python中如何优雅地创建表格的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • pandas使用函数批量处理数据(map、apply、applymap)

    pandas使用函数批量处理数据(map、apply、applymap)

    这篇文章主要介绍了pandas使用函数批量处理数据(map、apply、applymap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Python绘制的二项分布概率图示例

    Python绘制的二项分布概率图示例

    这篇文章主要介绍了Python绘制的二项分布概率图,涉及Python基于numpy、math的数值运算及matplotlib图形绘制相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • Python利用pymupdf实现简单的PDF阅读器

    Python利用pymupdf实现简单的PDF阅读器

    这篇文章主要为大家详细介绍了Python如何利用pymupdf实现简单的PDF阅读器,并展示了PDF文件的内容,文中的示例代码讲解详细,需要的可以了解一下
    2023-08-08
  • python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法

    python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer

    这篇文章主要介绍了python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法,需要的朋友可以参考下
    2020-02-02
  • Python操作MongoDB的教程详解(插,查,改,排,删)

    Python操作MongoDB的教程详解(插,查,改,排,删)

    MongoDB是一个基于分布式文件存储的数据库。是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。本文将详细和大家聊聊Python操作MongoDB的方法,需要的可以参考一下
    2022-09-09
  • 人脸识别实战之Opencv+SVM实现人脸识别

    人脸识别实战之Opencv+SVM实现人脸识别

    这篇文章主要介绍了通过Opencv+SVM实现人脸识别功能,文中的示例代码介绍详细,对于我们学习人脸识别和OpenCV都有一定的帮助,感兴趣的小伙伴可以学习一下
    2021-12-12
  • Python参数传递由浅入深实例教程

    Python参数传递由浅入深实例教程

    这篇文章主要为大家介绍了Python参数传递由浅入深实例教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11

最新评论