python-自动化篇-办公-将PDF文件转存为图片

因工作中的某些奇葩要求,需要将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 osimage_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

[‘PDF文件\6S稽查问题.pdf’, ‘PDF文件\收货记录.pdf’]

然后,遍历PDFfiles中的所有PDF文件,使用fitz.open()读取。fitz.open()用于创建PDF文件中页面的像素映射(pixel maps),即用像素来表示页面信息。然后按PDF文件名命名一个新的文件夹,以便储存图片。比如给“收货记录.pdf”文件建一个名字为“收货记录”的文件夹,专门储存关于它的页面的图片。随后用for循环,根据PDF的页数,按页提取图片。将每页的信息存入page变量,它的type 是fitz.fitz.Page,即一页像素文件。为了让图片看起来更清晰,需要增强图片的分辨率,设定图片水平及垂直方向的增强倍数,传入MatrixMatrix用于提升即将保存的图片的分辨率,分辨率的提升倍数为zoom_xzoom_y的乘积。倍数越大,图片越清晰,当然占用空间也越大。这个参数可根据实际要求调整。然后将Matrix存入mat,传入getPixmap()getPixmap()用于控制图片分辨率、色域(比如生成灰度图像或带有减色方案的图像)、透明度、旋转、镜像、移位、剪切等。由于其它都不需要专门设定,所以只增强其分辨率。

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

准备

pip install fitz
在这里插入图片描述

代码

#!/usr/bin/env python
# coding: utf-8# 因工作中的某些奇葩要求,需要将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`库可新建文件夹。# In[12]:#批量将PDF文件转为图片
import fitz
import glob
import osimage_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`中。结果如下所示:# In[2]: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`按页码编号写入并保存图片。
# ![](result.png)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/686277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kubernetes实战:通过ClusterIP方式访问springboot服务

目录 一、准备工作1.1、yaml文件编写 二、创建k8s Service参考资料 一、准备工作 1.1、yaml文件编写 创建kubernets-discovery-service_service.yaml文件,yaml文件内容如下 apiVersion: v1 kind: Service metadata:name: kubernets-discovery-servicenamespace: …

机器学习中7种常用的线性降维技术总结

上篇文章中我们主要总结了非线性的降维技术,本文我们来总结一下常见的线性降维技术。 1、Principal Component Analysis (PCA) Principal Component Analysis (PCA) 是一种常用的降维技术,用于将高维数据集转换为低维表示,同时保留数据集的…

高校疫情防控系统的全栈开发实战

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

Fiddler 无法抓包手机 https 报文的解决方案来啦!!

解决手机https无法抓包的问题 当你测试App的时候,想要通过Fiddler/Charles等工具抓包看下https请求的数据情况,发现大部分的App都提示网络异常/无数据等等信息 这时候怎么解决呢? 以软件测试面试提刷题APP为例: Fiddler上的显示…

vue实现多个下拉框联动(一)

要实现Vue3中多个下拉框的联动&#xff0c;可以使用v-model指令和watch特性来实现。 首先&#xff0c;在Vue组件中定义多个下拉框的数据和选项列表&#xff1a; <template><div><select v-model"selectedOption1"><option v-for"option …

蓝桥杯 星期计算

思路1 由于2022太大&#xff0c;用double来存储&#xff0c;即(52022 % 7) % 7即可 int num 5;int t (int)(Math.pow(20,22)%7);num t;num%7;System.out.println(num1);思路2 你需要知道 (a * b ) % p a % p * b % p Scanner scan new Scanner(System.in);int num 1;for…

深入解析ESP32C3(3)- bootloader启动流程

ESP32C3启动流程可以分为如下3 个步骤&#xff1a; 一级引导程序(PBL)&#xff1a;被固化在了ESP32-C3 内部的ROM 中&#xff0c;它会从flash 的0x0 偏移地址处加载二级引导程序至RAM (IRAM & DRAM) 中。二级引导程序(SBL)&#xff1a;从flash 中加载分区表和主程序镜像至…

python解构赋值详解(包含leetcode226.翻转二叉树题目讲解以及python代码)

目录 一、背景 1.1问题 1.2原因 二、解构赋值 2.1定义 2.2解题应用 2.2.1翻转二叉树 2.2.2 思路以及代码 一、背景 1.1问题 在写二叉树相关代码赋值的时候发现这样的写法&#xff0c;担心会发生这样的情况&#xff1a;先把node.right的值给node.left&#xff0c;在把…

【C++搜索】DFS:排列与组合

1. 题目描述 排列与组合是常用的数学方法&#xff0c;桐桐刚刚学会了全排列&#xff0c;就想试试组合&#xff0c;组合就是从n个元素中抽出r个元素&#xff08;不分顺序且r≤n&#xff09;&#xff0c;我们可以简单地将n个元素理解为自然数1&#xff0c;2&#xff0c;…&…

MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(3)-系统数据集合设计

前言 前几章教程我们把ToDoList系统的基本框架搭建好了&#xff0c;现在我们需要根据我们的需求把ToDoList系统所需要的系统集合&#xff08;相当于关系型数据库中的数据库表&#xff09;。接下来我们先简单概述一下这个系统主要需要实现的功能以及实现这些功能我们需要设计那些…

光伏计算数据的意义

随着全球气候变化的日益严重&#xff0c;可再生能源的发展已成为应对这一挑战的关键。其中&#xff0c;光伏能源作为一种清洁、可持续的能源形式&#xff0c;日益受到各国的重视。然而&#xff0c;要充分利用光伏能源&#xff0c;我们需要深入理解光伏计算数据&#xff0c;并明…

互联网加竞赛 基于设深度学习的人脸性别年龄识别系统

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习机器视觉的…

【RL】Value Iteration and Policy Iteration(利用迭代算法求解贝尔曼最优等式)

Lecture 4: Value Iteration and Policy Iteration Value Iteration Algorithm 对于Bellman最优公式&#xff1a; v f ( v ) m a x π ( r γ P π v ) \mathbf{v} f(\mathbf{v}) max_{\pi}(\mathbf{r} \gamma \mathbf{P}_{\pi} \mathbf{v}) vf(v)maxπ​(rγPπ​v) …

『运维备忘录』之 Sed 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

【大厂AI课学习笔记】【2.1 人工智能项目开发规划与目标】(1)发现与明确问题

抱歉&#xff0c;过春节这几天&#xff0c;没有更新。赶紧续上。 人就是这样&#xff0c;放假之前呢&#xff0c;想着趁着这个假期&#xff0c;把很多之前没有做好的事情&#xff0c;都梳理好&#xff0c;该补的也补上&#xff0c;结果一个假期就这样过去了&#xff0c;很多想…

单反相机用sd卡还是cf卡?相机cf卡和sd卡区别

随着科技的进步&#xff0c;单反相机成为了摄影爱好者和专业摄影师的必备工具。而在选择单反相机存储介质时&#xff0c;CF卡和SD卡成为了两种常见的选择。它们各有优缺点&#xff0c;适用于不同的摄影需求和场景。本文将深入探讨单反相机使用SD卡还是CF卡的问题&#xff0c;并…

stm32:pwm output模块,记录一下我是用smt32,输出pwm波的记录--(实现--重要)

我是实现了输出pwm波&#xff0c;频率固定&#xff0c;占空比可以不断调整的方法&#xff0c;将PA0接到示波器上&#xff0c;可以看到是一个标准的PWM波&#xff0c;如图下面示波器图。 1&#xff0c;首先是ioc的配置 我刚开始设置的分频的倍数是7199&#xff0c;使得分频的太…

【C++搜索】体积

题目描述 给你n个物品&#xff0c;每种物品有一个体积Vi&#xff0c;求从中取出若干物品能够组成的不同的体积和有多少种可能。例如&#xff0c;n3&#xff0c;Vi(1,3,4)&#xff0c;那么输出6。6种不同体积和具体为1,3,4,5,7,8。 输入 第一行一个整数n&#xff1b; 第二行…

设备驱动开发_2

编译和调试 主要内容 写一个可加载模块编译和加载一个可加载模块使用printk 进行跟踪和调试使用跟踪和调试1 写一个可加载模块 内核头文件 linux/module.h module_init(e1000_init_module) static int __init e1000_init_module(void) module_exit (e1000_exit_module) stati…

Fiddler抓包(网页、手机、MUMU模拟器)

前置条件&#xff1a;电脑上下载安装好了Fiddler&#xff0c;有浏览器 一、网页抓包 1、fiddler下载安装证书 Tools-Options 勾选下面两个框 点击下面的选项&#xff0c;信任证书 会弹出弹窗&#xff0c;点击yes&#xff08;这个时候注意&#xff0c;DO_NOT_TRUST_FiddlerRo…