【办公自动化】用Python将PDF文件转存为图片

简介: 【办公自动化】用Python将PDF文件转存为图片

一、Python处理PDF


  • Python处理PDF的好处


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


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


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


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


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


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


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


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


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

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


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


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


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


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


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


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


  1. 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出征,寸草不生~ O(∩_∩)O


       不过这个需要用到`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自动发送邮件

Python操作ppt和pdf基础

Python操作word基础

Python操作excel基础

使用Python一键提取PDF中的表格到Excel

使用Python批量生成PPT版荣誉证书

使用Python批量处理Excel文件并转为csv文件

目录
相关文章
|
7天前
|
文字识别 BI
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
49 8
|
11天前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
21天前
|
监控 网络安全 开发者
Python中的Paramiko与FTP文件夹及文件检测技巧
通过使用 Paramiko 和 FTP 库,开发者可以方便地检测远程服务器上的文件和文件夹是否存在。Paramiko 提供了通过 SSH 协议进行远程文件管理的能力,而 `ftplib` 则提供了通过 FTP 协议进行文件传输和管理的功能。通过理解和应用这些工具,您可以更加高效地管理和监控远程服务器上的文件系统。
51 20
|
27天前
|
存储 数据采集 数据处理
如何在Python中高效地读写大型文件?
大家好,我是V哥。上一篇介绍了Python文件读写操作,今天聊聊如何高效处理大型文件。主要方法包括:逐行读取、分块读取、内存映射(mmap)、pandas分块处理CSV、numpy处理二进制文件、itertools迭代处理及linecache逐行读取。这些方法能有效节省内存,提升效率。关注威哥爱编程,学习更多Python技巧。
|
28天前
|
机器学习/深度学习 人工智能 文字识别
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
Zerox 是一款开源的本地化高精度OCR工具,基于GPT-4o-mini模型,支持PDF、DOCX、图片等多种格式文件,能够零样本识别复杂布局文档,输出Markdown格式结果。
113 4
Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
|
28天前
|
存储 JSON 对象存储
如何使用 Python 进行文件读写操作?
大家好,我是V哥。本文介绍Python中文件读写操作的方法,包括文件读取、写入、追加、二进制模式、JSON、CSV和Pandas模块的使用,以及对象序列化与反序列化。通过这些方法,你可以根据不同的文件类型和需求,灵活选择合适的方式进行操作。希望对正在学习Python的小伙伴们有所帮助。欢迎关注威哥爱编程,全栈路上我们并肩前行。
|
1月前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
75 16
Python时间序列分析:使用TSFresh进行自动化特征提取
|
1月前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
1月前
|
存储 安全 数据可视化
用Python实现简单的任务自动化
本文介绍如何使用Python实现任务自动化,提高效率和准确性。通过三个实用案例展示:1. 使用`smtplib`和`schedule`库自动发送邮件提醒;2. 利用`shutil`和`os`库自动备份文件;3. 借助`requests`库自动下载网页内容。每个案例包含详细代码和解释,并附带注意事项。掌握这些技能有助于个人和企业优化流程、节约成本。
70 3
|
29天前
|
机器学习/深度学习 人工智能 运维
基于AI的自动化事件响应:智慧运维新时代
基于AI的自动化事件响应:智慧运维新时代
103 11

热门文章

最新文章

推荐镜像

更多