在青少年編程競賽交流群中,我每周日晚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)得到結果如下: