一文教會你用Python讀取PDF文件
實戰(zhàn)場景
Python 工程師在日常的工作中,經(jīng)常會碰到解析和處理PDF文件的情況,實戰(zhàn)中需求主要分為如下情況:
- 提取 PDF 中的文字
- 將 PDF 中每頁轉換為圖片
- word 轉換為PDF
- PDF生成,編輯,導入導出
- PDF在線渲染
除了最后一項需要前端配合以外,其余內(nèi)容都可以直接在 python 端進行實現(xiàn)。
本次實戰(zhàn)選擇 pdfplumber 庫進行學習,可以提前安裝該庫,不過有一點需要注意,該庫主要用于讀取 PDF 進行操作,寫入和編輯無法實現(xiàn),即本文學習一款專注于 PDF 內(nèi)容提取的庫。
> pip install pdfplumber -i https://pypi.tuna.tsinghua.edu.cn/simple
pdfplumber 庫具備如下特點:
- 可以訪問PDF對象中的任意元素詳細信息;
- 可以提取文本和表格,而且用法簡單;
- 集成了可視化調(diào)試。
Python PDF 實戰(zhàn)編碼
下面可以編寫 PDF 操作的基礎代碼。
import pdfplumber
with pdfplumber.open('./dddd.pdf') as pdf:
for page in pdf.pages:
print(page.extract_text())
# 每頁打印一分頁分隔
print('---------- 分頁分隔 ----------')
導入 pdfplumber 模塊之后,使用 pdfplumber.open('./dddd.pdf') 打開本地 pdf 文件,然后通過 pdf.pages 遍歷所有頁,在通過頁對象的 .extract_text() 方法,提取文本信息。
pdfplumber.open() 方法的簽名如下所示:
pdfplumber.open("文件名", password = "密碼", laparams = { "line_overlap": 0.7 })
其中各參數(shù)描述如下:
file_name:文件名,必選參數(shù);password:PDF的密碼;laparams:布局參數(shù)。
除此之外,如果希望讀取 PDF,還可以使用 load() 方法,該方法也會返回 pdfplumber.PDF 類的實例。
pdfplumber.PDF 對象實例,主要有兩個重要屬性:
.metadata:從PDF的Info中獲取元數(shù)據(jù)鍵 /值對字典。 通常包括“ CreationDate”,“ ModDate”,“ Producer”等;.pages:包含pdfplumber.Page實例的列表,每一個實例代表PDF每一頁的信息。
上文提及的 pdfplumber.Page 實例是 pdfplumber 的核心,后續(xù)對 PDF 的操作大量圍繞該類的屬性和方法實施,其重要屬性如下所示:
page_number:頁碼順序,第一頁的序號是 1;witdh:寬度;height:高度;.objects/.chars/.lines/.rects/.curves/.figures/.images:獲取PDF頁中的重要數(shù)據(jù)。
核心方法如下所示:
extract_text():提取頁中的文本;extract_words():提取所有單詞及其相關信息;extract_tables(): 提取頁面的表格。
extract_text() 呈現(xiàn)結果

extract_words() 呈現(xiàn)結果

extract_tables() 呈現(xiàn)效果,由于 PDF 中無表格,所有每頁得到的都是空!

補充
當然Python除了讀取PDF文件,還有一些其他功能,例如加密PDF,旋轉和疊加頁面等,下面是實現(xiàn)的示例代碼
旋轉和疊加頁面
import PyPDF2
from PyPDF2.pdf import PageObject
# 創(chuàng)建一個讀PDF文件的Reader對象
reader = PyPDF2.PdfFileReader('resources/XGBoost.pdf')
# 創(chuàng)建一個寫PDF文件的Writer對象
writer = PyPDF2.PdfFileWriter()
# 對PDF文件所有頁進行循環(huán)遍歷
for page_num in range(reader.numPages):
# 獲取指定頁碼的Page對象
current_page = reader.getPage(page_num) # type: PageObject
if page_num % 2 == 0:
# 奇數(shù)頁順時針旋轉90度
current_page.rotateClockwise(90)
else:
# 偶數(shù)頁反時針旋轉90度
current_page.rotateCounterClockwise(90)
writer.addPage(current_page)
# 最后添加一個空白頁并旋轉90度
page = writer.addBlankPage() # type: PageObject
page.rotateClockwise(90)
# 通過Writer對象的write方法將PDF寫入文件
with open('resources/XGBoost-modified.pdf', 'wb') as file:
writer.write(file)加密PDF文件
import PyPDF2
reader = PyPDF2.PdfFileReader('resources/XGBoost.pdf')
writer = PyPDF2.PdfFileWriter()
for page_num in range(reader.numPages):
writer.addPage(reader.getPage(page_num))
# 通過encrypt方法加密PDF文件,方法的參數(shù)就是rre
#設置的密碼
writer.encrypt('foobared')
with open('resources/XGBoost-encrypted.pdf', 'wb') as file:
writer.write(file)批量添加水印
import PyPDF2
from PyPDF2.pdf import PageObject
reader1 = PyPDF2.PdfFileReader('resources/XGBoost.pdf') reader2 = PyPDF2.PdfFileReader('resources/watermark.pdf')
writer = PyPDF2.PdfFileWriter()
# 獲取水印頁
watermark_page = reader2.getPage(0)
for page_num in range(reader1.numPages):
current_page = reader1.getPage(page_num) # type: PageObject current_page.mergePage(watermark_page)
# 將原始頁和水印頁進行合并
writer.addPage(current_page)
# 將PDF寫入文件
with open('resources/XGBoost-watermarked.pdf', 'wb') as file:
writer.write(file)到此這篇關于一文教會你用Python讀取PDF文件的文章就介紹到這了,更多相關Python讀取PDF文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python中datetime模塊中strftime/strptime函數(shù)的使用
這篇文章主要介紹了python中datetime模塊中strftime/strptime函數(shù)的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07
Python+OpenCV檢測燈光亮點的實現(xiàn)方法
這篇文章主要介紹了Python+OpenCV檢測燈光亮點的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11
使用Python和python-pptx構建Markdown到PowerPoint轉換器
在這篇博客中,我們將深入分析一個使用 Python 開發(fā)的應用程序,該程序可以將 Markdown 文件轉換為 PowerPoint 演示文稿,我們將探討代碼結構、功能和關鍵組件,并解決一個特定的 bug,需要的朋友可以參考下2025-03-03
windows下python使用ffmpeg實現(xiàn)rtsp推流
這篇文章主要為大家詳細介紹了在windows環(huán)境下python如何使用ffmpeg實現(xiàn)rtsp推流,文中的示例代碼講解詳細,有需要的小伙伴可以了解一下2023-09-09
Python random模塊(獲取隨機數(shù))常用方法和使用例子
這篇文章主要介紹了Python random模塊(獲取隨機數(shù))常用方法和使用例子,需要的朋友可以參考下2014-05-05

