使用Python將PDF文件轉(zhuǎn)存為圖片的代碼示例
一、Python處理PDF
Python處理PDF的好處
自動化和批量處理:使用Python,你可以自動處理大量的PDF文件,例如從掃描儀生成的文檔、報(bào)告、合同等。這可以節(jié)省大量時(shí)間和努力,尤其是在需要重復(fù)性任務(wù)時(shí)。
文本提取:Python可以輕松地從PDF中提取文本內(nèi)容,使其可搜索、可編輯和可分析。這對于文本分析、數(shù)據(jù)挖掘和文檔檢索等任務(wù)非常有用。
報(bào)告生成:你可以使用Python創(chuàng)建自定義的PDF報(bào)告,將數(shù)據(jù)、圖表和圖像等信息以專業(yè)的方式呈現(xiàn)。這對于生成自動化的業(yè)務(wù)報(bào)告、數(shù)據(jù)可視化和數(shù)據(jù)分析很有幫助。
PDF編輯:Python庫和工具使你能夠合并、拆分、旋轉(zhuǎn)、裁剪和編輯PDF文件的頁面。這對于在不使用專業(yè)PDF編輯軟件的情況下進(jìn)行簡單的文檔編輯很有用。
圖像提取:Python允許你從PDF文件中提取圖像,這對于處理包含圖形、圖表和圖片的文檔非常有幫助。
數(shù)據(jù)提取:當(dāng)PDF文件包含表格或結(jié)構(gòu)化數(shù)據(jù)時(shí),Python可以用于提取和轉(zhuǎn)換這些數(shù)據(jù),以便進(jìn)一步分析或?qū)氲綌?shù)據(jù)庫中。
自定義處理:Python提供了多種用于PDF處理的庫,允許你根據(jù)項(xiàng)目的需求進(jìn)行自定義處理。你可以選擇適合你需求的庫,以滿足具體要求。
跨平臺:Python是跨平臺的,因此你可以在不同操作系統(tǒng)上運(yùn)行相同的代碼,而無需擔(dān)心兼容性問題。
Python處理PDF文件的主要第三方庫包括:
PyPDF2:PyPDF2是一個(gè)用于處理PDF文件的庫,可以用于提取文本、合并、拆分和旋轉(zhuǎn)PDF文件的頁面。它還支持添加頁面、水印和書簽等功能。
ReportLab:ReportLab是一個(gè)用于創(chuàng)建PDF文件的庫,允許你以編程方式構(gòu)建PDF文檔,包括添加文本、圖像、表格等。
PDFMiner:PDFMiner是一個(gè)用于提取文本和元數(shù)據(jù)的PDF處理庫。它可以解析PDF文件并提取文本、布局信息和鏈接等。
pdf2image:pdf2image是一個(gè)用于將PDF文件轉(zhuǎn)換為圖像的庫,這對于處理包含圖形的PDF文件非常有用。
fpdf2:fpdf2是一個(gè)用于創(chuàng)建PDF文件的庫,支持自定義字體、圖像和表格等。
PyMuPDF:PyMuPDF是一個(gè)用于處理PDF文件的庫,可以用于提取文本、圖像和元數(shù)據(jù)。它還支持PDF文件的渲染和轉(zhuǎn)換為圖像。
Camelot:Camelot是一個(gè)用于提取表格數(shù)據(jù)的庫,特別適用于從PDF文件中提取表格數(shù)據(jù)。
Tabula-py:Tabula-py是一個(gè)用于提取表格數(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ā)工具:有兩個(gè)可以選擇,jupyter notebook,是個(gè)網(wǎng)頁編輯器,可以運(yùn)行Python,常常用于交互性、探索性的開發(fā);pycharm,用于成熟腳本,或者web服務(wù)的一些開發(fā);這兩個(gè)工具可以隨意選擇。
二、用Python將PDF文件轉(zhuǎn)存為圖片
技術(shù)工具:
Python版本:3.9
代碼編輯器:jupyter notebook
因工作中的某些奇葩要求,需要將PDF文件的每頁內(nèi)容轉(zhuǎn)存成按順序編號的圖片。用第三方軟件或者在線轉(zhuǎn)換也可以,但批量操作還是Python方便,所謂搞定辦公自動化,Python出山,一統(tǒng)天下;Python出征,寸草不生~
不過這個(gè)需要用到`PyMuPDF`庫,電腦運(yùn)行cmd,輸入“pip install PyMuPDF”安裝即可。安裝后通過`import fitz`導(dǎo)入模塊。等等,為什么安裝的是`PyMuPDF`,導(dǎo)入的是`fitz`?俺`PyMuPDF`就是這么任性,怎么的,愛用不用!哈哈,開個(gè)玩笑。其實(shí)是因?yàn)閌PyMuPDF`曾用名`fitz-python`,所以只是`fitz`換了個(gè)馬甲而已。
這里先導(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] #增強(qiáng)圖片分辨率 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文件名命名一個(gè)新的文件夾,以便儲存圖片。比如給“收貨記錄.pdf”文件建一個(gè)名字為“收貨記錄”的文件夾,專門儲存關(guān)于它的頁面的圖片。隨后用`for`循環(huán),根據(jù)PDF的頁數(shù),按頁提取圖片。將每頁的信息存入`page`變量,它的type 是`fitz.fitz.Page`,即一頁像素文件。
為了讓圖片看起來更清晰,需要增強(qiáng)圖片的分辨率,設(shè)定圖片水平及垂直方向的增強(qiáng)倍數(shù),傳入`Matrix`。`Matrix`用于提升即將保存的圖片的分辨率,分辨率的提升倍數(shù)為`zoom_x`與`zoom_y`的乘積。倍數(shù)越大,圖片越清晰,當(dāng)然占用空間也越大。這個(gè)參數(shù)可根據(jù)實(shí)際要求調(diào)整。然后將`Matrix`存入`mat`,傳入`getPixmap()`。`getPixmap()`用于控制圖片分辨率、色域(比如生成灰度圖像或帶有減色方案的圖像)、透明度、旋轉(zhuǎn)、鏡像、移位、剪切等。由于其它都不需要專門設(shè)定,所以只增強(qiáng)其分辨率。
一頁圖片處理好后,就需要保存圖片了。先通過`os.path.exists`判斷一下需要的文件夾是否存在,若不存在就通過`os.makedirs`創(chuàng)建。然后用`pix.writeImage`按頁碼編號寫入并保存圖片。
以上就是使用Python將PDF文件轉(zhuǎn)存為圖片的代碼示例的詳細(xì)內(nèi)容,更多關(guān)于Python將PDF文件轉(zhuǎn)存為圖片的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python Selenium XPath根據(jù)文本內(nèi)容查找元素的方法
這篇文章主要介紹了Python Selenium XPath根據(jù)文本內(nèi)容查找元素的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12python-xpath獲取html文檔的部分內(nèi)容
這篇文章主要介紹了python-xpath獲取html文檔的部分內(nèi)容,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03PyCharm添加Anaconda中的虛擬環(huán)境Python解釋器出現(xiàn)Conda?executable?is?not
這篇文章主要給大家介紹了關(guān)于PyCharm添加Anaconda中的虛擬環(huán)境Python解釋器出現(xiàn)Conda?executable?is?not?found錯(cuò)誤的解決辦法,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-02-02python框架django項(xiàng)目部署相關(guān)知識詳解
這篇文章主要介紹了python框架django項(xiàng)目部署相關(guān)知識詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11