讀取 PDF 內容
這篇文章會介紹使用 Python 的 pdfplumber 第三方函式庫,讀取 pdf 的內容,將內容輸出儲存為純文字檔案,或將表格內容輸出為 CSV 檔。
快速導覽:
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
安裝 pdfplumber 函式庫
輸入下列指令安裝 pdfplumber,根據個人環境使用 pip 或 pip3。
!pip install pdfplumber
讀取 pdf 內容
使用 pdfplumber 開啟指定路徑中的 pdf 檔案後,讀取 pages 屬性內容,就能將 pdf 所有頁面回傳為串列格式 ( 範例 pdf 共有三頁 )。
下載:範例 pdf
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
import pdfplumber
pdf = pdfplumber.open('oxxostudio.pdf') # 開啟 pdf
print(pdf.pages) # [<Page:1>, <Page:2>, <Page:3>],共有三頁
透過 pages 讀取頁面串列後,使用讀取串列項目的方式開啟指定頁面,再藉由 extract_text() 方法讀取該頁面的文字內容。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
import pdfplumber
pdf = pdfplumber.open('oxxostudio.pdf')
page = pdf.pages[0] # 讀取第一頁
text = page.extract_text() # 取出文字
print(text)
如果頁面具有「表格」內容,使用 extract_table() 方法會將表格以「串列」方式表現 ( 範例 pdf 第二頁為表格 )。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
import pdfplumber
pdf = pdfplumber.open('oxxostudio.pdf')
page = pdf.pages[1] # 讀取第二頁
table = page.extract_table() # 取出表格
print(table)
pdf.close()
讀取加密 pdf
如果是加密的 pdf,可以在 open 時設定 password 參數,輸入密碼後就能開啟 pdf。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
import pdfplumber
pdf = pdfplumber.open('test.pdf', password='12345678') # 輸入密碼
page = pdf.pages[0]
text = page.extract_text()
print(text)
pdf.close()
讀取 pdf 內容儲存為純文字文件
參考「內建函式 ( 檔案讀寫 open )」文章,新增一個 test.txt 純文字文件,就能將讀取到的 pdf 寫入純文字文件中。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks') # Colab 換路徑使用
import pdfplumber
pdf = pdfplumber.open('oxxostudio.pdf')
page = pdf.pages[0]
text = page.extract_text()
print(text)
pdf.close()
f = open('test.txt','w+') # 使用 w+ 模式開啟 test.txt
f.write(text) # 寫入內容
f.close() # 關閉 test.txt
讀取 pdf 表格儲存為 CSV
參考「CSV 檔案操作」文章,新增一個 test-csv.csv 純文字文件,搭配 for 迴圈,就能將讀取到的 pdf 表格內容寫入 CSV 文件中。
import pdfplumber
pdf = pdfplumber.open('oxxostudio.pdf')
page = pdf.pages[1]
table = page.extract_table()
print(table)
pdf.close()
import csv
csvfile = open('test-csv.csv', 'w+') # 建立 CSV 檔案
write = csv.writer(csvfile) # 建立寫入物件
for i in table:
write.writerow(i) # 讀取表格每一列寫入 CSV
print('ok')
後記
本來想要使用 PyPDF2 讀取 pdf 內容,但發現雖然可以讀取 pdf,卻無法正確解析內容文字,後來才選擇 pdfplumber 作為 Python 讀取 pdf 內容的首選。
參考:https://github.com/jsvine/pdfplumber
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~