如何将Pdf文件转化成PNG图像?
在青少年编程竞赛交流群中,我每周日晚20:00都会开展直播活动,带着小朋友们学习编程。
之后,我也会把每周要求小朋友做的题目以图文的形式发放出来,方便小朋友们复习。比如:Scratch等级考试(二级)模拟题。
其中,有一个环节就是把PDF文档转成PNG图像。然后,上传到微信公众号后台。
今天,我向大家介绍一下,自己是如何使用PyMuPDF库来完成这些操作的。
官方文档:
https://pymupdf.readthedocs.io/en/latest/intro.html
PyPI 源:
https://pypi.org/project/PyMuPDF/
PyMuPDF 安装:
pip install PyMuPDF
安装完成之后:
Name: PyMuPDF
Version: 1.18.14
Summary: PyMuPDF is a Python binding for the document renderer and toolkit MuPDF
Home-page: https://github.com/pymupdf/PyMuPDF
Author: Jorj McKie
Author-email: jorj.x.mckie@outlook.de
License: GNU AFFERO GPL 3.0
Location: c:\programdata\anaconda3\lib\site-packages
Requires:
Required-by:
(base) PS D:\Users\Administrator>
PyMuPDF包的导入
import fitz
注意:这块跟我们其它包不太一样,通常情况下包的名称跟pip install
后的名称一致,但这个包导入的是fitz
。
完整代码如下:
import fitz
import os
from datetime import datetime
def PDF_To_PNG(pdfPath, imagePath):
startTime = datetime.now() # 开始时间
if not os.path.exists(imagePath):
os.makedirs(imagePath)
print('ImagePath:' + imagePath)
pdfDoc = fitz.Document(pdfPath) # 打开文件
for pg in range(pdfDoc.page_count): # 遍历所有页面
page = pdfDoc[pg]
rotate = int(0) # 页面旋转角度
# 此处若是不做设置,默认图片大小为:792X612, dpi=96
zoom_x = 1.0 # 设置图片相对于PDF文件在X轴上的缩放比例
zoom_y = 1.0 # 设置图片相对于PDF文件在Y轴上的缩放比例
mat = fitz.Matrix(zoom_x, zoom_y).prerotate(rotate)
pix = page.getPixmap(matrix=mat, alpha=False)
pix.writePNG(imagePath + '/' + 'images_%s.png' % pg)
endTime = datetime.now()
print('pdf2png Time:', (endTime - startTime).seconds)
if __name__ == '__main__':
pdfPath = './Scratch二级20210613.pdf'
imagePath = './提取结果'
PDF_To_PNG(pdfPath, imagePath)
得到结果如下: