logo头像

猪老大要进步!

使用Python优雅地将PDF转化为图片

本文于 1096 天之前发表,文中内容可能已经过时。

疫情期间,内燃机老师要我们每周在QQ小程序上面用图片的形式提交两次作业,然而我的WPS会员过期了,pdf转图片会有水印,网上逛了一圈,python可以解决这个问题。

一、准备工作

fitz是对PDF文件操作的一个包,安装依赖于traitsPyMuPDF

1
pip3 install traits.whl
  • 安装PyMuPDF==1.16.7(Python 3.5)和fitz
1
pip3 install PyMuPDF==1.16.7 fitz

二、程序主体

源码下载:https://github.com/lankning/pyutils/blob/master/pdf2img.py

  • 库的导入、函数封装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import sys, fitz
import os
import datetime

def pyMuPDF_fitz(pdfPath, imagePath):
startTime_pdf2img = datetime.datetime.now()#开始时间

print("imagePath="+imagePath)
pdfDoc = fitz.open(pdfPath)
for pg in range(pdfDoc.pageCount):
page = pdfDoc[pg]
rotate = int(0)
# 每个尺寸的缩放系数为1.3,这将为我们生成分辨率提高2.6的图像。
# 此处若是不做设置,默认图片大小为:792X612, dpi=96
zoom_x = 1.33333333*2 #(1.33333333-->1056x816) (2-->1584x1224)
zoom_y = 1.33333333*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) # 若图片文件夹不存在就创建

pix.writePNG(imagePath+'/'+'images_%s.png' % pg)#将图片写入指定的文件夹内

endTime_pdf2img = datetime.datetime.now()#结束时间
print('pdf2img时间=',(endTime_pdf2img - startTime_pdf2img).seconds,'s')
  • 主函数
1
2
3
4
5
if __name__ == "__main__":
homeworkname='内燃机构造与原理平时作业七'
pdfPath = '../'+homeworkname+'.pdf'
imagePath = '../'+homeworkname+'/'
pyMuPDF_fitz(pdfPath, imagePath)

参考资料

  1. https://blog.csdn.net/zbj18314469395/article/details/98329442
  2. https://zhuanlan.zhihu.com/p/102742847
  3. https://github.com/pymupdf/PyMuPDF/issues/414
支付宝打赏 微信打赏

赞赏是不耍流氓的鼓励