本文所使用的环境为python3.8.5
,所使用的模块包参考如下requirements.txt
pyinstaller==6.7.0
pyinstaller-hooks-contrib==2024.6
PyMuPDF==1.19.3
tk==0.1.0
一键安装依赖脚本 pip install -r requirements.txt
1. 安装 pyinstaller
pip install pyinstaller
2. 写一个pdf转图片的脚本+
新建文件pdf.py
。此处使用PyMuPDF
模块进行文件转换,TkInter
打开图形窗口选择文件,相关模块自行安装。
import datetime,os,time
import fitz # pip install PyMuPDF
import tkinter as tk # pip install tk
from tkinter import filedialog
def pyMuPDF_fitz(pdfPath, imagePath):
startTime_pdf2img = datetime.datetime.now()
file_name = os.path.basename(pdfPath).split('.')[0]
if not os.path.exists(imagePath + '/' + file_name):
os.mkdir(imagePath + '/' + file_name)
pdfDoc = fitz.open(pdfPath)
for pg in range(pdfDoc.pageCount):
page = pdfDoc[pg]
rotate = int(0)
# 每个尺寸的缩放系数为1.3,这将为我们生成分辨率提高2的图像。
# 此处若是不做设置,默认图片大小为:792X612, dpi=96
zoom_x = 2
zoom_y = 2
mat = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
pix = page.getPixmap(matrix=mat, alpha=False)
if not os.path.exists(imagePath):
os.makedirs(imagePath)
print('图片' + str(pg+1) + ':' + str(pix.width) + 'x' + str(pix.height))
pix.writeImage(imagePath + '/' + file_name + '/' + '%s.jpg' % (pg+1))
endTime_pdf2img = datetime.datetime.now()
print('处理完成,耗时=', (endTime_pdf2img - startTime_pdf2img).seconds)
time.sleep(3)
# pyinstaller -F --version-file=version.txt -i icon.ico com.py
if __name__ == "__main__":
print('请先选择需要转换的pdf文件')
root = tk.Tk()
root.title('选择需要转换的文件')
root.withdraw()
pdfPath = filedialog.askopenfilename()
print('选择文件:' + pdfPath)
print('请选择需要保存的目录')
root = tk.Tk()
root.title('选择需要保存的目录')
root.withdraw()
imagePath = filedialog.askdirectory()
print('保存目录:' + imagePath)
pyMuPDF_fitz(pdfPath, imagePath)
3. 设置文件版本信息
新建一个文件version.txt
,内容参考如下
# UTF-8
VSVersionInfo(
ffi=FixedFileInfo(
#filevers和prodvers应该始终是包含四个项的元组:(1、2、3、4),将不需要的项设置为0
filevers=(1, 0, 0, 0), # 文件版本******,鼠标悬浮exe会显示,也显示在 详细信息-文件版本,这个是检测版本的依据
prodvers=(4, 6, 9, 4), # 生产商,未见显示在哪里
mask=0x3f, # 两个位掩码
flags=0x0,
OS=0x4, # 为其设计此文件的操作系统,0x4-NT,无需更改它
fileType=0x1, # 文件的常规类型,0x1-该文件是一个应用程序
subtype=0x0, # 文件的功能,0x0表示该文件类型未定义
date=(0, 0) # 创建日期和时间戳
),
kids=[
StringFileInfo(
[
StringTable(
u'040904B0',
[StringStruct(u'CompanyName', u'pdf转图片'), # 鼠标悬浮exe会显示
StringStruct(u'FileDescription', u'先选择需要抓换的pdf文件,再选择保存目录'), # 文件说明,鼠标悬浮exe会显示,也会显示在 详细信息-文件说明
StringStruct(u'FileVersion', u'1.1.0'), # 没见哪里显示
StringStruct(u'InternalName', u'pdf转图片'),
StringStruct(u'LegalCopyright', u'pdf转图片,测试软件禁止转载'), #版权,会显示在 详细信息-版权
StringStruct(u'OriginalFilename', u'pdf转图片.exe'), #原始文件名,会显示在 详细信息-原始文件名
StringStruct(u'ProductName', u'pdf转图片1.0'), #产品名称,会显示在 详细信息-产品名称
StringStruct(u'ProductVersion', u'1.0.0.0')]) #产品版本,会显示在 详细信息-产品版本
]),
VarFileInfo([VarStruct(u'Translation', [2052, 1200])]) # 语言,中文简体
]
)
4. 使用 pyinstaller
打包脚本为exe
pyinstaller
其他更多参数可以自行探索。
# 软件版本信息使用`version.txt`
# 软件图标为`icon.ico`
# 打包脚本`pdf.py`
pyinstaller -F --version-file=version.txt -i icon.ico pdf.py
命令执行提示completed successfully
就是成功了,会在当前目录下生成build
dist
两个目录,dist
里面的pdf.exe
就是我们打包成功的文件了。
接下来就可以使用一下我们刚刚打包的软件了
双击pdf.exe
,选择pdf文件,再选择保存的目录,接下来就可以看到pdf文件被成功转换为图片了。