本文作者:王碧琪
文字編輯:方 言
技術(shù)總編:張 邯
PDF是一種穩(wěn)定性和安全性都很強(qiáng)的格式文件哗讥,有很多資料會(huì)選擇采用PDF格式來保存杆煞,但是文件中的文字內(nèi)容可以復(fù)制腐泻。為了防止這一點(diǎn),我們可以將PDF再轉(zhuǎn)換成JPG圖片构诚,這樣就更加保護(hù)PDF文件中的信息了铆惑。之前我們了解了pymupdf庫可以提取PDF中的文本信息,今天我們繼續(xù)用它把PDF轉(zhuǎn)換成圖片文件丑蛤。
一撕阎、簡介
使用的庫仍然是pymupdf。待處理文檔名為“demo1”名斟,共有三頁,內(nèi)容如下:
二砰盐、轉(zhuǎn)換處理
(一)導(dǎo)入文件
import fitz
doc = fitz.open(f".\\pdfs\\ demo1.pdf")
print(doc)
print(doc.pageCount)
運(yùn)行結(jié)果為:
fitz.Document('.\pdfs\demo1.pdf')
3
結(jié)果顯示岩梳,fitz處理之后的文檔“demo1”文件共有3頁。
(二)轉(zhuǎn)換成圖片
下面是幾個(gè)常用的用法也物。
方法 | 含義 |
---|---|
Matrix.preRotate(deg) | 旋轉(zhuǎn)列疗。填入旋轉(zhuǎn)角度(以度為單位)。 |
Matrix.preScale(sx告材,sy) | 縮放古劲。sx表示x方向上的縮放系數(shù),sy表示y方向上的縮放系數(shù)产艾。 |
Matrix.preShear(sx,sy) | 剪切(傾斜)骚露。sx表示x方向上的剪切效果缚窿,sy表示y方向上的剪切效果。 |
init(self, zoom-x, zoom-y) | 指定縮放值误续。 |
init(self, shear-x, shear-y, 1) | 指定剪切值扫茅。 |
首先設(shè)置轉(zhuǎn)換的參數(shù)。利用Matrix()可以設(shè)置圖片的大小栽烂、旋轉(zhuǎn)的角度等。
rotate = int(0) # 設(shè)置圖片的旋轉(zhuǎn)角度為0
zoom_x = 2.0 # 設(shè)置圖片相對(duì)于PDF文件在X軸上的縮放比例為2
zoom_y = 2.0 # 設(shè)置圖片相對(duì)于PDF文件在Y軸上的縮放比例為2
trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
print(f"{filename}開始轉(zhuǎn)換...")
接下來進(jìn)行轉(zhuǎn)換焰手,利用page.getPixmap()用于創(chuàng)建一個(gè)pixmap怀喉,把設(shè)置好的轉(zhuǎn)換參數(shù)填入。Pixmap(“pixel maps”)
是mupdf渲染功能的核心躲履。他們代表像素的平面矩形集聊闯。每個(gè)像素由定義其顏色的多個(gè)字節(jié)(“components”)以及定義其透明度的可選alpha字節(jié)描述。
再用writeImage( )把轉(zhuǎn)換好的圖片輸出篷帅。它的語法是:writeImage(filename, output=None)
汗销。filename填入文件名抵窒,output是輸出的圖片格式,默認(rèn)值為文件的擴(kuò)展名削茁,無法識(shí)別時(shí)假定為png掉房。
for pg in range(doc.pageCount):
page = doc[pg] # 獲得第pg頁
pm = page.getPixmap(matrix=trans, alpha=False) # 創(chuàng)建pixmap
pm.writeImage(f"{filename}-{pg+1}.jpg") # 輸出為jpg圖片格式
print(f"{filename}轉(zhuǎn)換完成!")
運(yùn)行結(jié)果如下:
demo1開始轉(zhuǎn)換...
demo1轉(zhuǎn)換完成瘾杭!
去看一下工作路徑下生成的圖片:
大功告成粥烁!利用pymupdf庫的幾個(gè)函數(shù)成功把PDF文檔變成了不可編輯的圖片。