python转换并提取pdf文件中的图片

embedded/2024/9/24 7:34:29/
#安装fitz包
pip install pymupdf 

脚本如下所示:

import fitz
import re
import os
import time
import sysarguments = sys.argvfor arg in arguments:print(arg)def file_name_list(base_dir):for i, j, k in os.walk(base_dir):name = [i.replace('.pdf', '') for i in k]return namedef pdfExtractPic(filePath, pic_path):ret = {}try:iNum = 0with fitz.open(filePath) as doc:for page in range(len(doc)):for image in doc.get_page_images(page):xref = image[0]pix = fitz.Pixmap(doc, xref)iNum += 1fileName = ("%s\%d.png"%(pic_path, iNum))if pix.n < 5:pix.save(fileName)else:pix1 = fitz.Pixmap(fitz.csRGB, pix)pix1.save(fileName)pix1 = Noneexcept Exception as e:print(e)return retdef pdf2image(path, pic_path, image_name):try:with fitz.open(path) as pdf:for pg in range(0, pdf.page_count):page = pdf[pg]# 设置缩放和旋转系数,zoom_x, zoom_y取相同值,表示等比例缩放mat = fitz.Matrix(2, 2)pm = page.get_pixmap(matrix=mat, alpha=False)# if width or height > 2000 pixels, don't enlarge the imageif pm.width > 2000 or pm.height > 2000:pm = page.get_pixmap(matrix=fitz.Matrix(1, 1), alpha=False)page_num = pg + 1  # 页码从1开始new_name = '%s_img_%d.png' % (image_name, page_num)pm.save(os.path.join(pic_path, new_name)) except Exception as error:print(error)                if __name__ == '__main__':if len(arguments) < 2:print("请输入pdf所在目录的路径.")sys.exit(1)base_dir = arguments[1]name_list = file_name_list(base_dir)start = time.time()for name in name_list:image_name = namefile_name = r'\%s.pdf' % name  # PDF 文件路径file_path = base_dir + file_namepic_name = r'\pic\%s' % name  # 存放图片的文件夹pic_path = base_dir + pic_nametry:os.makedirs(pic_path)   # 根据路径,创建对应路径下的文件夹except Exception as error:print(error)        pdf2image(file_path, pic_path, image_name)#print(pic_path)pic_path += "\\sub\\"try:os.makedirs(pic_path)   # 根据路径,创建对应路径下的文件夹except Exception as error:print(error)   pdfExtractPic(file_path, pic_path)end = time.time()print('task is over: %.2f' % (end-start))

如果执行的时候报错:

RuntimeError: Directory ‘static‘ does not exist

说明fitz安装错了版本,参考:PyMuPDF: AttributeError:模块‘fitz‘没有属性‘open’_attributeerror: module 'fitz' has no attribute 'op-CSDN博客


http://www.ppmy.cn/embedded/109906.html

相关文章

喜报! 炼石入选中国信通院《数据安全产业技术产品服务全景图》

近日&#xff0c;在2024中国国际大数据产业博览会“数据安全产业发展”交流活动上&#xff0c;中国信息通信研究院安全研究所副所长魏薇发布了《数据安全产业技术产品服务全景图》&#xff08;以下简称“全景图”&#xff09;。全景图从数据安全产业的概念和内涵出发&#xff0…

Java中的配置文件

员工管理的增删改查功能已开发完成&#xff0c;但在我们所开发的程序中还一些小问题&#xff0c;下面就来分析一下当前案例中存在的问题以及如何优化解决。 1.1 参数配置化 在之前编写的程序中进行文件上传时&#xff0c;需要调用AliOSSUtils工具类&#xff0c;将文件上传到阿…

C++mutable

文章目录 Claude 讲解基本用法mutable的常见用途注意事项 ChatGpt 讲解1. 基本概念2. 使用示例解释&#xff1a; 3. 适用场景4. 注意事项 lambda 讲解基本语法示例捕获方式使用场景 mutable 和 labmda 一起使用代码&#xff1a;代码分析&#xff1a;输出结果&#xff1a; 在C编…

uniapp个人健康预警管理系统 微信小程序的设计与实现 38vk1

目录 博主介绍技术栈系统设计&#x1f31f;文末获取源码数据库&#x1f31f;具体实现截图后端前端java类核心代码部分展示可行性论证个人心得系统测试操作可行性源码获取详细视频演示 博主介绍 &#x1f447;&#x1f3fb; 博主介绍&#xff1a;&#x1f447;&#x1f3fb; 专…

PyTorch自动混合精度训练

torch.cuda.amp.GradScaler 是 PyTorch 中的一个用于自动混合精度&#xff08;Automatic Mixed Precision, AMP&#xff09;训练的工具。AMP 允许在训练深度学习模型时动态切换浮点数的精度&#xff08;例如&#xff0c;使用半精度浮点数 float16 而非 float32&#xff09;&…

非监督式机器学习:群集

聚类分析是一种非监督式机器学习形式&#xff0c;在此形式下&#xff0c;基于观察值的数据值或特征的相似性&#xff0c;将观察值分组到群集中。 这种就是非监督式机器学习&#xff0c;因为它不使用先前已知的标签值来训练模型。 在聚类分析模型中&#xff0c;标签是群集&#…

Java设计模式【备忘录模式】-行为型

1. 介绍 备忘录模式&#xff08;Memento Pattern&#xff09; 是一种行为型设计模式&#xff0c;允许在不破坏封装的前提下&#xff0c;捕获并保存一个对象的内部状态&#xff0c;然后可以在以后将其恢复到原先保存的状态。备忘录模式的核心思想是记录和恢复对象的状态&#x…

Catia的插件不能调用CAA 的API问题

今天到客户实施Catia二开软件&#xff0c;发现在客户的电脑上调用CAA的API出现调用失败的问题。 根据经验&#xff0c;想到大概是用户电脑上的Catia授权有问题&#xff0c;但是Catia的一大堆授权中需要哪些授权呢&#xff0c;最后花了半天的时间使用二分法测试出&#xff0c;C…