使用Python將PDF文件轉(zhuǎn)存為圖片的代碼示例
一、Python處理PDF
Python處理PDF的好處
自動化和批量處理:使用Python,你可以自動處理大量的PDF文件,例如從掃描儀生成的文檔、報告、合同等。這可以節(jié)省大量時間和努力,尤其是在需要重復(fù)性任務(wù)時。
文本提取:Python可以輕松地從PDF中提取文本內(nèi)容,使其可搜索、可編輯和可分析。這對于文本分析、數(shù)據(jù)挖掘和文檔檢索等任務(wù)非常有用。
報告生成:你可以使用Python創(chuàng)建自定義的PDF報告,將數(shù)據(jù)、圖表和圖像等信息以專業(yè)的方式呈現(xiàn)。這對于生成自動化的業(yè)務(wù)報告、數(shù)據(jù)可視化和數(shù)據(jù)分析很有幫助。
PDF編輯:Python庫和工具使你能夠合并、拆分、旋轉(zhuǎn)、裁剪和編輯PDF文件的頁面。這對于在不使用專業(yè)PDF編輯軟件的情況下進行簡單的文檔編輯很有用。
圖像提取:Python允許你從PDF文件中提取圖像,這對于處理包含圖形、圖表和圖片的文檔非常有幫助。
數(shù)據(jù)提取:當PDF文件包含表格或結(jié)構(gòu)化數(shù)據(jù)時,Python可以用于提取和轉(zhuǎn)換這些數(shù)據(jù),以便進一步分析或?qū)氲綌?shù)據(jù)庫中。
自定義處理:Python提供了多種用于PDF處理的庫,允許你根據(jù)項目的需求進行自定義處理。你可以選擇適合你需求的庫,以滿足具體要求。
跨平臺:Python是跨平臺的,因此你可以在不同操作系統(tǒng)上運行相同的代碼,而無需擔心兼容性問題。
Python處理PDF文件的主要第三方庫包括:
PyPDF2:PyPDF2是一個用于處理PDF文件的庫,可以用于提取文本、合并、拆分和旋轉(zhuǎn)PDF文件的頁面。它還支持添加頁面、水印和書簽等功能。
ReportLab:ReportLab是一個用于創(chuàng)建PDF文件的庫,允許你以編程方式構(gòu)建PDF文檔,包括添加文本、圖像、表格等。
PDFMiner:PDFMiner是一個用于提取文本和元數(shù)據(jù)的PDF處理庫。它可以解析PDF文件并提取文本、布局信息和鏈接等。
pdf2image:pdf2image是一個用于將PDF文件轉(zhuǎn)換為圖像的庫,這對于處理包含圖形的PDF文件非常有用。
fpdf2:fpdf2是一個用于創(chuàng)建PDF文件的庫,支持自定義字體、圖像和表格等。
PyMuPDF:PyMuPDF是一個用于處理PDF文件的庫,可以用于提取文本、圖像和元數(shù)據(jù)。它還支持PDF文件的渲染和轉(zhuǎn)換為圖像。
Camelot:Camelot是一個用于提取表格數(shù)據(jù)的庫,特別適用于從PDF文件中提取表格數(shù)據(jù)。
Tabula-py:Tabula-py是一個用于提取表格數(shù)據(jù)的庫,可將PDF中的表格轉(zhuǎn)換為DataFrame對象。
開發(fā)環(huán)境
操作系統(tǒng):使用windows, mac都可以
Python版本:系統(tǒng)中需要安裝Python3.6以上的版本,Python2已經(jīng)過期不建議使用,Python3.6以前的版本功能相對弱,最好就是采用Python3.6以上的版本
開發(fā)工具:有兩個可以選擇,jupyter notebook,是個網(wǎng)頁編輯器,可以運行Python,常常用于交互性、探索性的開發(fā);pycharm,用于成熟腳本,或者web服務(wù)的一些開發(fā);這兩個工具可以隨意選擇。
二、用Python將PDF文件轉(zhuǎn)存為圖片
技術(shù)工具:
Python版本:3.9
代碼編輯器:jupyter notebook
因工作中的某些奇葩要求,需要將PDF文件的每頁內(nèi)容轉(zhuǎn)存成按順序編號的圖片。用第三方軟件或者在線轉(zhuǎn)換也可以,但批量操作還是Python方便,所謂搞定辦公自動化,Python出山,一統(tǒng)天下;Python出征,寸草不生~
不過這個需要用到`PyMuPDF`庫,電腦運行cmd,輸入“pip install PyMuPDF”安裝即可。安裝后通過`import fitz`導(dǎo)入模塊。等等,為什么安裝的是`PyMuPDF`,導(dǎo)入的是`fitz`?俺`PyMuPDF`就是這么任性,怎么的,愛用不用!哈哈,開個玩笑。其實是因為`PyMuPDF`曾用名`fitz-python`,所以只是`fitz`換了個馬甲而已。
這里先導(dǎo)入`fitz`庫,用于將PDF文件的頁面提取成像素信息(圖片)。再導(dǎo)入`glob`庫,用于獲取后綴為".pdf"的文件的文件名。`os`庫可新建文件夾。
#批量將PDF文件轉(zhuǎn)為圖片
import fitz
import glob
import os
image_path = "圖片\\" #存放圖片的文件夾
PDFfiles = glob.glob("PDF文件\\*.pdf") #獲取所有pdf文件的文件名
for PDFfile in PDFfiles: #遍歷所有PDF文件
PDFdoc = fitz.open(PDFfile) #讀取PDF文件
folder_name = PDFfile.split("\\")[-1].split(".")[0] #按源文件名新建文件夾
for pg in range(PDFdoc.pageCount): #根據(jù)PDF的頁數(shù),按頁提取圖片
page = PDFdoc[pg]
#增強圖片分辨率
zoom_x = 3 #水平方向
zoom_y = 3 #垂直方向
mat = fitz.Matrix(zoom_x, zoom_y)
pix = page.getPixmap(matrix=mat)
#按原PDF名稱新建文件夾并按順序保存圖片
if not os.path.exists(image_path+folder_name):#判斷文件夾是否已存在
os.makedirs(image_path+folder_name)#不存在則新建,存在就跳過這行
pix.writeImage(image_path+folder_name + "\\{}.png".format(str(pg+1))) #按PDF中的頁面順序命名并保存圖片以上,我們先將所有待處理的PDF文件放入“PDF文件夾”,然后通過`glob.glob("PDF文件\\*.pdf")`搜索并抓取所有以".pdf"為后綴的文件,并存入變量`PDFfiles`中。結(jié)果如下所示:
PDFfiles

然后,遍歷`PDFfiles`中的所有PDF文件,使用`fitz.open()`讀取。`fitz.open()`用于創(chuàng)建PDF文件中頁面的像素映射(pixel maps),即用像素來表示頁面信息。然后按PDF文件名命名一個新的文件夾,以便儲存圖片。比如給“收貨記錄.pdf”文件建一個名字為“收貨記錄”的文件夾,專門儲存關(guān)于它的頁面的圖片。隨后用`for`循環(huán),根據(jù)PDF的頁數(shù),按頁提取圖片。將每頁的信息存入`page`變量,它的type 是`fitz.fitz.Page`,即一頁像素文件。
為了讓圖片看起來更清晰,需要增強圖片的分辨率,設(shè)定圖片水平及垂直方向的增強倍數(shù),傳入`Matrix`。`Matrix`用于提升即將保存的圖片的分辨率,分辨率的提升倍數(shù)為`zoom_x`與`zoom_y`的乘積。倍數(shù)越大,圖片越清晰,當然占用空間也越大。這個參數(shù)可根據(jù)實際要求調(diào)整。然后將`Matrix`存入`mat`,傳入`getPixmap()`。`getPixmap()`用于控制圖片分辨率、色域(比如生成灰度圖像或帶有減色方案的圖像)、透明度、旋轉(zhuǎn)、鏡像、移位、剪切等。由于其它都不需要專門設(shè)定,所以只增強其分辨率。
一頁圖片處理好后,就需要保存圖片了。先通過`os.path.exists`判斷一下需要的文件夾是否存在,若不存在就通過`os.makedirs`創(chuàng)建。然后用`pix.writeImage`按頁碼編號寫入并保存圖片。

以上就是使用Python將PDF文件轉(zhuǎn)存為圖片的代碼示例的詳細內(nèi)容,更多關(guān)于Python將PDF文件轉(zhuǎn)存為圖片的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python實現(xiàn)圖像檢索的三種(直方圖/OpenCV/哈希法)
這篇文章主要介紹了python實現(xiàn)圖像檢索的三種(直方圖/OpenCV/哈希法),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Python實現(xiàn)將實體類列表數(shù)據(jù)導(dǎo)出到Excel文件
在數(shù)據(jù)處理和報告生成中,將實體類的列表數(shù)據(jù)導(dǎo)出到Excel文件是一項常見任務(wù),Python提供了多種庫來實現(xiàn)這一目標,下面就來跟隨小編一起學(xué)習(xí)一下吧2025-01-01
利用Python中unittest實現(xiàn)簡單的單元測試實例詳解
如果項目復(fù)雜,進行單元測試是保證降低出錯率的好方法,Python提供的unittest可以很方便的實現(xiàn)單元測試,從而可以替換掉繁瑣雜亂的main函數(shù)測試的方法,將測試用例、測試方法進行統(tǒng)一的管理和維護。本文主要介紹了利用Python中unittest實現(xiàn)簡單的單元測試。2017-01-01
NumPy中zeros_like()函數(shù)的使用及說明
本文介紹了NumPy的numpy.zeros_like()函數(shù),包括其用法、參數(shù)、與numpy.zeros()的區(qū)別,以及在科學(xué)計算、機器學(xué)習(xí)等領(lǐng)域的應(yīng)用場景,強調(diào)其能夠簡便高效地創(chuàng)建與現(xiàn)有數(shù)組形狀和類型相同的全零數(shù)組2025-10-10

