本文所使用的环境为python3.8.5,所使用的模块包参考如下requirements.txt

  1. pyinstaller==6.7.0
  2. pyinstaller-hooks-contrib==2024.6
  3. PyMuPDF==1.19.3
  4. tk==0.1.0

一键安装依赖脚本 pip install -r requirements.txt

1. 安装 pyinstaller

  1. pip install pyinstaller

2. 写一个pdf转图片的脚本+

新建文件pdf.py。此处使用PyMuPDF模块进行文件转换,TkInter打开图形窗口选择文件,相关模块自行安装。

  1. import datetime,os,time
  2. import fitz # pip install PyMuPDF
  3. import tkinter as tk # pip install tk
  4. from tkinter import filedialog
  5. def pyMuPDF_fitz(pdfPath, imagePath):
  6. startTime_pdf2img = datetime.datetime.now()
  7. file_name = os.path.basename(pdfPath).split('.')[0]
  8. if not os.path.exists(imagePath + '/' + file_name):
  9. os.mkdir(imagePath + '/' + file_name)
  10. pdfDoc = fitz.open(pdfPath)
  11. for pg in range(pdfDoc.pageCount):
  12. page = pdfDoc[pg]
  13. rotate = int(0)
  14. # 每个尺寸的缩放系数为1.3,这将为我们生成分辨率提高2的图像。
  15. # 此处若是不做设置,默认图片大小为:792X612, dpi=96
  16. zoom_x = 2
  17. zoom_y = 2
  18. mat = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
  19. pix = page.getPixmap(matrix=mat, alpha=False)
  20. if not os.path.exists(imagePath):
  21. os.makedirs(imagePath)
  22. print('图片' + str(pg+1) + ':' + str(pix.width) + 'x' + str(pix.height))
  23. pix.writeImage(imagePath + '/' + file_name + '/' + '%s.jpg' % (pg+1))
  24. endTime_pdf2img = datetime.datetime.now()
  25. print('处理完成,耗时=', (endTime_pdf2img - startTime_pdf2img).seconds)
  26. time.sleep(3)
  27. # pyinstaller -F --version-file=version.txt -i icon.ico com.py
  28. if __name__ == "__main__":
  29. print('请先选择需要转换的pdf文件')
  30. root = tk.Tk()
  31. root.title('选择需要转换的文件')
  32. root.withdraw()
  33. pdfPath = filedialog.askopenfilename()
  34. print('选择文件:' + pdfPath)
  35. print('请选择需要保存的目录')
  36. root = tk.Tk()
  37. root.title('选择需要保存的目录')
  38. root.withdraw()
  39. imagePath = filedialog.askdirectory()
  40. print('保存目录:' + imagePath)
  41. pyMuPDF_fitz(pdfPath, imagePath)

3. 设置文件版本信息

新建一个文件version.txt,内容参考如下

  1. # UTF-8
  2. VSVersionInfo(
  3. ffi=FixedFileInfo(
  4. #filevers和prodvers应该始终是包含四个项的元组:(1、2、3、4),将不需要的项设置为0
  5. filevers=(1, 0, 0, 0), # 文件版本******,鼠标悬浮exe会显示,也显示在 详细信息-文件版本,这个是检测版本的依据
  6. prodvers=(4, 6, 9, 4), # 生产商,未见显示在哪里
  7. mask=0x3f, # 两个位掩码
  8. flags=0x0,
  9. OS=0x4, # 为其设计此文件的操作系统,0x4-NT,无需更改它
  10. fileType=0x1, # 文件的常规类型,0x1-该文件是一个应用程序
  11. subtype=0x0, # 文件的功能,0x0表示该文件类型未定义
  12. date=(0, 0) # 创建日期和时间戳
  13. ),
  14. kids=[
  15. StringFileInfo(
  16. [
  17. StringTable(
  18. u'040904B0',
  19. [StringStruct(u'CompanyName', u'pdf转图片'), # 鼠标悬浮exe会显示
  20. StringStruct(u'FileDescription', u'先选择需要抓换的pdf文件,再选择保存目录'), # 文件说明,鼠标悬浮exe会显示,也会显示在 详细信息-文件说明
  21. StringStruct(u'FileVersion', u'1.1.0'), # 没见哪里显示
  22. StringStruct(u'InternalName', u'pdf转图片'),
  23. StringStruct(u'LegalCopyright', u'pdf转图片,测试软件禁止转载'), #版权,会显示在 详细信息-版权
  24. StringStruct(u'OriginalFilename', u'pdf转图片.exe'), #原始文件名,会显示在 详细信息-原始文件名
  25. StringStruct(u'ProductName', u'pdf转图片1.0'), #产品名称,会显示在 详细信息-产品名称
  26. StringStruct(u'ProductVersion', u'1.0.0.0')]) #产品版本,会显示在 详细信息-产品版本
  27. ]),
  28. VarFileInfo([VarStruct(u'Translation', [2052, 1200])]) # 语言,中文简体
  29. ]
  30. )

4. 使用 pyinstaller 打包脚本为exe

pyinstaller其他更多参数可以自行探索。

  1. # 软件版本信息使用`version.txt`
  2. # 软件图标为`icon.ico`
  3. # 打包脚本`pdf.py`
  4. pyinstaller -F --version-file=version.txt -i icon.ico pdf.py

命令执行提示completed successfully就是成功了,会在当前目录下生成build dist 两个目录,dist里面的pdf.exe就是我们打包成功的文件了。

接下来就可以使用一下我们刚刚打包的软件了

双击pdf.exe,选择pdf文件,再选择保存的目录,接下来就可以看到pdf文件被成功转换为图片了。