1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python将PDF文件转换为图片

python将PDF文件转换为图片

时间:2024-05-11 01:58:55

相关推荐

python将PDF文件转换为图片

二、基于 fitz 库和正则搜索提取图片

fitz 库是 pymupdf 中的一个模块,用它来提取 pdf 里的图片非常方便。

安装命令

pipinstallfitzpipinstallpymupdf

三、代码实现

导入相关包

importfitzimportreimportos

读取 pdf 提取图片,并存储

import fitzimport timeimport reimport osdef pdf2pic(path, pic_path):t0 = time.process_time() # 生成图片初始时间checkXO = r"/Type(?= */XObject)"# 使用正则表达式来查找图片checkIM = r"/Subtype(?= */Image)"doc = fitz.open(path) # 打开pdf文件imgcount = 0# 图片计数lenXREF = doc.xref_length() # 获取对象数量长度# 打印PDF的信息print("文件名:{}, 页数: {}, 对象: {}".format(path, len(doc), lenXREF - 1))# 遍历每一个对象for i in range(1, lenXREF):text = doc.xref_object(i)# 定义对象字符串isXObject = re.search(checkXO, text) # 使用正则表达式查看是否是对象isImage = re.search(checkIM, text) # 使用正则表达式查看是否是图片if not isXObject or not isImage: # 如果不是对象也不是图片,则continuecontinueimgcount += 1pix = fitz.Pixmap(doc, i) # 生成图像对象new_name = "图片{}.png".format(imgcount) # 生成图片的名称if pix.n < 5: # 如果pix.n<5,可以直接存为PNGpix.save(os.path.join(pic_path, new_name))else: # 否则先转换CMYKpix0 = fitz.Pixmap(fitz.csRGB, pix)pix0.save(os.path.join(pic_path, new_name))pix0 = Nonepix = None# 释放资源t1 = time.perf_counter()# 图片完成时间print("运行时间:{}s".format(t1 - t0))print("提取了{}张图片".format(imgcount))if __name__=='__main__':path = r"D:\python脚本\XX.pdf"pic_path = r'D:\python脚本\图片'# 创建保存图片的文件夹if os.path.exists(pic_path):print("文件夹已存在,不必重新创建!")passelse:os.mkdir(pic_path)pdf2pic(path, pic_path)

运行结果

四、小结

Python 中 pdf2image 库也可以完成以上需求,它的好处是如果你的 pdf 页面较多时,pdf2image 可以启动多线程会大大加快转换速度,具体可参考pdf2image 官方文档。

最后,可能会遇到提取的图片比原本少,或者提取出不想要的图片。可以通过检查图片格式,可能不是常见的格式,提取时再减少或添加过滤条件进行尝试

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。