Python操作PDF全總結|pdfplumber&PyPDF2
持續分享Python入門、案例、工具教程。
Python在自動化辦公方面有很多實用的第三方庫,可以很方便的處理word、excel、ppt、pdf檔案,今天我們就學習一下Python處理PDF文件的知識,Python處理pdf有很多第三方庫,這裡先給大家介紹最常用的兩個庫
「pdfplumber」
、
「pypdf2」
。
「pdfplumber:」
pdfplumber庫按頁處理 pdf ,獲取頁面文字,提取表格等操作。
學習文件:
https://
github。com/jsvine/pdfpl
umber
「pypdf2:」
PyPDF2 是一個純 Python PDF 庫,可以讀取文件資訊(標題,作者等)、寫入、分割、合併PDF文件,它還可以對pdf文件進行新增水印、加密解密等。
官方文件:
https://
pythonhosted。org/PyPDF2
安裝:
pip install pypdf2
pip install pdfplumber
pdfplumber
提取PDF文字
「提取單頁pdf文字」
# 提取pdf文字
import pdfplumber
with pdfplumber。open(“D:\\pdffiles\\Python編碼規範中文版。pdf”) as pdf:
page01 = pdf。pages[0] #指定頁碼
text = page01。extract_text()#提取文字
print(text)
「提取所有頁pdf文字」
import pdfplumber
with pdfplumber。open(“D:\\pdffiles\\Python編碼規範中文版。pdf”) as pdf:
for page in pdf。pages:
text = page。extract_text()#提取文字
print(text)
「提取所有pdf文字並寫入文字中」
import pdfplumber
with pdfplumber。open(“D:\\pdffiles\\Python編碼規範中文版。pdf”) as pdf:
for page in pdf。pages:
text = page。extract_text()#提取文字
txt_file = open(“D:\\pdffiles\\Python編碼規範中文版。txt”,mode=‘a’,encoding=‘utf-8’)
txt_file。write(text)
提取PDF表格
「提取表格」
# 提取pdf表格
import pdfplumber
with pdfplumber。open(“D:\\pdffiles\\人力資源部崗位編制。pdf”) as pdf:
page01 = pdf。pages[0] #指定頁碼
table1 = page01。extract_table()#提取單個表格
# table2 = page01。extract_tables()#提取多個表格
print(table1)
「提取表格,儲存為excel檔案」
import pdfplumber
from openpyxl import Workbook #儲存表格,需要安裝openpyxl
with pdfplumber。open(“D:\\pdffiles\\人力資源部崗位編制。pdf”) as pdf:
page01 = pdf。pages[0]
table = page01。extract_table()
workbook = Workbook()
sheet = workbook。active
for row in table:
sheet。append(row)
workbook。save(filename=“D:\\pdffiles\\人力資源部崗位編制。xlsx”)
PyPDF2
PyPDF2 中有兩個最常用的類:
PdfFileReader
和
PdfFileWriter
,分別用於讀取 PDF 和寫入 PDF。其中
PdfFileReader
傳入引數可以是一個開啟的檔案物件,也可以是表示檔案路徑的字串。而
PdfFileWriter
則必須傳入一個以寫方式開啟的檔案物件。
「PdfFileReader 物件的屬性和方法」
「PdfFileWriter 物件的屬性和方法」
分割PDF
from PyPDF2 import PdfFileReader, PdfFileWriter
file_reader = PdfFileReader(“D:\\pdffiles\\Python編碼規範中文版。pdf”)
# getNumPages() 獲取總頁數
for page in range(file_reader。getNumPages()):
# 例項化物件
file_writer = PdfFileWriter()
# 將遍歷的每一頁新增到例項化物件中
file_writer。addPage(file_reader。getPage(page))
with open(“D:\\pdffiles\\{}。pdf”。format(page),‘wb’) as out:
file_writer。write(out)
合併PDF
將上述分割的pdf合併成一個檔案
「示例程式碼」
from PyPDF2 import PdfFileReader, PdfFileWriter
file_writer = PdfFileWriter()
for page in range(34):
# 迴圈讀取需要合併pdf檔案
file_reader = PdfFileReader(“D:\\pdffiles\\{}。pdf”。format(page))
# 遍歷每個pdf的每一頁
for page in range(file_reader。getNumPages()):
# 寫入例項化物件中
file_writer。addPage(file_reader。getPage(page))
with open(“D:\\pdffiles\\合併。pdf”,‘wb’) as out:
file_writer。write(out)
PDF旋轉
# 旋轉pdf,只能按照90度的倍數旋轉
from PyPDF2 import PdfFileReader, PdfFileWriter
file_reader = PdfFileReader(“D:\\pdffiles\\Python編碼規範中文版。pdf”)
file_writer = PdfFileWriter()
page = file_reader。getPage(0)。rotateClockwise(90) # 第1頁順時針旋轉90度
file_writer。addPage(page) # 寫入
page = file_reader。getPage(1)。rotateCounterClockwise(90) # 第2頁逆時針旋轉90度
file_writer。addPage(page) # 寫入
with open(“D:\\pdffiles\\旋轉。pdf”,‘wb’) as out:
file_writer。write(out)
PDF加密解密
「新增密碼」
from PyPDF2 import PdfFileReader, PdfFileWriter
file_reader = PdfFileReader(“D:\\pdffiles\\Python編碼規範中文版。pdf”)
file_writer = PdfFileWriter()
for page in range(file_reader。getNumPages()):
file_writer。addPage(file_reader。getPage(page))
file_writer。encrypt(‘123456’) # 設定密碼
with open(“D:\\pdffiles\\加密後。pdf”,‘wb’) as out:
file_writer。write(out)
開啟檔案,提示輸入密碼
「解除密碼」
from PyPDF2 import PdfFileReader, PdfFileWriter
file_reader = PdfFileReader(“D:\\pdffiles\\加密後。pdf”)
file_reader。decrypt(‘123456’)
file_writer = PdfFileWriter()
for page in range(file_reader。getNumPages()):
file_writer。addPage(file_reader。getPage(page))
with open(“D:\\pdffiles\\解密後。pdf”,‘wb’) as out:
file_writer。write(out)
PDF新增水印
首先準備一個水印文件,可以用空白word新增圖片或者文字轉成pdf檔案。
「示例程式碼」
# 新增水印
from PyPDF2 import PdfFileReader, PdfFileWriter
from copy import copy
sy = PdfFileReader(“D:\\pdffiles\\水印。pdf”)
mark_page = sy。getPage(0) # 水印所在的頁數
# 讀取新增水印的檔案
file_reader = PdfFileReader(“D:\\pdffiles\\Python編碼規範中文版。pdf”)
file_writer = PdfFileWriter()
for page in range(file_reader。getNumPages()):
# 讀取需要新增水印每一頁pdf
source_page = file_reader。getPage(page)
new_page = copy(mark_page) #
new_page。mergePage(source_page) # new_page(水印)在下面,source_page原文在上面
file_writer。addPage(new_page)
with open(“D:\\pdffiles\\新增水印後。pdf”,‘wb’) as out:
file_writer。write(out)
新增水印後的文件:
如果覺得有用,歡迎點贊、轉發、收藏!
人生不止,學習不止,一路同行!