Python环境下想要将PDF文件转图像,可以使用PyMuPDF库。
PyMuPDF是MuPDF的Python绑定-“轻量级PDF和XPS查看器”。
MuPDF可以访问PDF,XPS,OpenXPS,CBZ(漫画书档案),FB2和EPUB(电子书)格式的文件,也可以是扩展名为.pdf,.xps,.oxps,.cbz,.fb2 或.epub的文件(因此您可以使用Python开发电子书查看器……),因此它不仅仅可以解析PDF文件。
支持的操作系统是哪些?
PyMuPDF可以在Mac,Linux,Windows XP SP2及更高版本上运行,Python 2.7到Python 3.7(请注意,Python仅支持v3.4以下的Windows XP),32位和64位版本上运行并经过测试。
只要MuPDF和Python支持它们,其他平台也应该可以正常工作。
支持的操作系统还是很广泛的。
PyMuPDF托管在Github和PyPi上,因此我们可以很方便的安装。
pip install pymupdf
具体安装方法参考:
Installation — PyMuPDF 1.19.1 documentationhttps://pymupdf.readthedocs.io/en/latest/installation.html
该库的标准Python import语句是import fitz。
这有历史原因:
MuPDF的原始渲染库称为Libart。
“在Artifex Software收购MuPDF项目之后,开发重点转移到编写名为* Fitz的新现代图形库。Fitz最初是作为一个研发项目来替代老化的Ghostscript图形库,但后来成为支持MuPDF的渲染引擎。” *(引自Wikipedia)。
""" **************************************************************************************************** @版权声明: Copyright (c) 2012-2021 LiuBing. All rights reserved. @许可版本: Corporation & Enterprise @创建时间: 2021-11-18 @创建作者: 370711753 @文件名称: pdf2image.py @文件功能: PDF文件转图像. @软件版本: V1.0.1 **************************************************************************************************** """ #################################################################################################### # Linux/OS X 系统下声明这是一个 Python 可执行程序; Windows 系统会忽略这个注释. # !/usr/bin/env python # 指定 Python 解释器按照 UTF-8 编码读取源代码, 否则源代码中的中文输出时可能会乱码. # -*- coding: utf-8 -*- #################################################################################################### # 【系统模块】 # 加入“绝对引入”新特性: # 这样就可用import string引入系统标准string.py, 而用from pkg import string来引入当前目录下的string.py. from __future__ import absolute_import, division, print_function, unicode_literals # 导入 os 库: 用于读取文件和目录结构. import os # 导入 sys 库: 包含与 Python 解释器和它的环境有关的函数. import sys # 导入 time 库: 用于获取时间信息. import time import datetime # 导入 fitz 库: PyMuPDF, 用于处理PDF. import fitz #################################################################################################### # PDF文件转图像 def lmc_pdf2image(pdf_path, image_path, image_format): """ 函数功能: PDF文件转图像. pdf_path: PDF文件名称. image_path: 图像保存路径. image_format: 图像格式. """ # 开始时间 time_start = datetime.datetime.now() # 检验PDF文件是否存在 if not os.path.exists(pdf_path): print(f"PDF文件 {pdf_path} 不存在, 请您核查!") return else: print(f"PDF文件名称为: {pdf_path}!") # 检验图像保存路径是否存在 if not os.path.exists(image_path): print(f"图像保存路径 {image_path} 不存在, 自动创建!") os.makedirs(image_path) else: print(f"图像保存路径: {image_path}") # 检验文件名称是否合法 if (image_format != "jpg") or (image_format != "bmp") or (image_format != "png") \ or (image_format != "tif") or (image_format != "gif"): print(f"图像文件扩展名: {image_format} 不合法, 请您核查!") else: print(f"图像文件扩展名: {image_format}") # 打开PDF文件 pdf_doc = fitz.open(pdf_path) # 遍历所有PDF页面 for page_index in range(pdf_doc.pageCount): page = pdf_doc[page_index] rotate = int(0) # 默认页面转图片大小为: "letter": (612, 792), dpi=96 # 页面缩放系数设为1.3, 这将生成分辨率提高2.6的图像. # (1.33333333-->816x1056) (2-->1224x1584) zoom_x = 1.33333333 zoom_y = 1.33333333 # 页面缩放 mat = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate) # 转化成图像 pix = page.get_pixmap(matrix=mat, alpha=False) # 保存图像 pix.save(image_path + '/' + '图像_%08d.png' % page_index) # 将图片写入指定的文件夹内 print(f"第 {page_index} 页转换完毕...") # 结束时间 time_end = datetime.datetime.now() print(f"PDF文件转图像完毕, 总计耗时: {(time_end - time_start).seconds} 秒!") if __name__ == "__main__": # PDF文件转图像 lmc_pdf2image('1.pdf', './image', '')