欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中pypdf庫處理PDF文件的詳細說明和常見用法

 更新時間:2025年05月19日 09:27:46   作者:彬彬俠  
這篇文章主要介紹了Python中pypdf庫處理PDF文件的詳細說明和常見用法,?pypdf是Python庫,用于處理PDF文件,支持讀取、修改、合并、拆分、加密等操作,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

pypdf 是一個純 Python 庫,用于處理 PDF 文件。它支持讀取、修改、合并、拆分、加密和提取 PDF 文件的文本、元數(shù)據(jù)及頁面內容。pypdf 是 PyPDF2 的繼任者(2022 年更名并重構),提供了更現(xiàn)代化的 API 和更高的性能,適合處理簡單的 PDF 操作任務。

以下是對 pypdf 庫的詳細說明和常見用法。

1. pypdf 庫的作用

  • 讀取 PDF:提取文本、元數(shù)據(jù)、頁面數(shù)量等。
  • 修改 PDF:合并、拆分、旋轉、裁剪頁面。
  • 創(chuàng)建 PDF:生成新 PDF 或添加內容(如文本、水印)。
  • 加密/解密:為 PDF 設置密碼或解鎖受保護的 PDF。
  • 跨平臺:純 Python 實現(xiàn),無需外部依賴(如 Adobe Acrobat)。

2. 安裝與環(huán)境要求

  • Python 版本:支持 Python 3.6+(推薦 3.8+)。
  • 依賴:無強制外部依賴,可選依賴:
    • Pillow:處理 PDF 中的圖像。
    • pycryptodome:支持加密/解密。
  • 安裝命令
    pip install pypdf
    
  • 可選擴展
    pip install pypdf[image]  # 包含 Pillow
    pip install pypdf[crypto]  # 包含 pycryptodome
    
  • 驗證安裝
    import pypdf
    print(pypdf.__version__)  # 示例輸出: 5.0.1
    

3. 核心功能與用法

pypdf 的核心類包括 PdfReader(讀取 PDF)、PdfWriter(修改/創(chuàng)建 PDF)和 PdfMerger(合并 PDF)。以下是主要功能和示例。

3.1 讀取 PDF

使用 PdfReader 讀取 PDF 文件,提取元數(shù)據(jù)、頁面數(shù)和文本。

from pypdf import PdfReader

# 打開 PDF 文件
reader = PdfReader("example.pdf")

# 獲取元數(shù)據(jù)
metadata = reader.metadata
print(metadata)  # 輸出: {'/Title': 'Example PDF', '/Author': 'John Doe', ...}

# 獲取頁面數(shù)
print(len(reader.pages))  # 輸出頁面數(shù)

# 提取第一頁文本
page = reader.pages[0]
print(page.extract_text())

說明

  • reader.metadata 返回 PDF 元數(shù)據(jù)(如標題、作者)。
  • reader.pages 是一個頁面列表,pages[i] 返回第 i 頁(從 0 開始)。
  • page.extract_text() 提取頁面文本(效果依賴 PDF 結構,可能不完整)。

3.2 合并 PDF

使用 PdfMerger 或 PdfWriter 合并多個 PDF 文件。

from pypdf import PdfMerger

# 創(chuàng)建合并器
merger = PdfMerger()

# 添加 PDF 文件
merger.append("file1.pdf")
merger.append("file2.pdf")

# 保存合并結果
merger.write("merged.pdf")
merger.close()

替代方法(使用 PdfWriter)

from pypdf import PdfReader, PdfWriter

writer = PdfWriter()
for pdf in ["file1.pdf", "file2.pdf"]:
    reader = PdfReader(pdf)
    for page in reader.pages:
        writer.add_page(page)

with open("merged.pdf", "wb") as f:
    writer.write(f)

說明

  • PdfMerger 更適合簡單合并任務。
  • PdfWriter 提供更靈活的控制。

3.3 拆分 PDF

將 PDF 拆分為單個頁面或指定范圍。

from pypdf import PdfReader, PdfWriter

reader = PdfReader("example.pdf")

# 拆分每一頁為單獨 PDF
for i, page in enumerate(reader.pages):
    writer = PdfWriter()
    writer.add_page(page)
    with open(f"page_{i+1}.pdf", "wb") as f:
        writer.write(f)

說明

  • 每個頁面保存為單獨文件。
  • 可通過索引選擇特定頁面范圍。

3.4 旋轉頁面

旋轉 PDF 的頁面。

from pypdf import PdfReader, PdfWriter

reader = PdfReader("example.pdf")
writer = PdfWriter()

# 旋轉第一頁 90 度
page = reader.pages[0]
page.rotate(90)
writer.add_page(page)

# 保存結果
with open("rotated.pdf", "wb") as f:
    writer.write(f)

說明

  • page.rotate(angle) 接受角度(順時針,90 的倍數(shù))。
  • 旋轉后的頁面添加到新 PDF。

3.5 加密/解密 PDF

為 PDF 設置密碼或解鎖受保護的 PDF。

from pypdf import PdfReader, PdfWriter

# 加密 PDF
reader = PdfReader("example.pdf")
writer = PdfWriter()

for page in reader.pages:
    writer.add_page(page)

writer.encrypt(user_password="my_password", algorithm="AES-256")
with open("encrypted.pdf", "wb") as f:
    writer.write(f)

# 解密 PDF
reader = PdfReader("encrypted.pdf")
if reader.is_encrypted:
    reader.decrypt("my_password")
print(reader.pages[0].extract_text())

說明

  • encrypt 支持 RC4-128 和 AES-256 算法。
  • decrypt 需提供正確密碼。

3.6 提取圖像

從 PDF 中提取圖像(需安裝 Pillow)。

from pypdf import PdfReader

reader = PdfReader("example.pdf")
page = reader.pages[0]
for img in page.images:
    with open(f"image_{img.name}", "wb") as f:
        f.write(img.data)

說明

  • page.images 返回頁面中的圖像對象。
  • img.data 是圖像的二進制數(shù)據(jù)。

4. 性能與特點

  • 高效性:純 Python 實現(xiàn),啟動快,無需外部工具。
  • 內存效率:逐頁處理,適合大型 PDF。
  • 靈活性:支持頁面級操作和元數(shù)據(jù)修改。
  • 局限性
    • 文本提取效果依賴 PDF 結構,復雜格式(如掃描文檔)可能失敗。
    • 不支持直接編輯 PDF 內容(如修改文本),需結合其他庫(如 reportlab)。

5. 實際應用場景

  • 文檔處理:合并報告、拆分章節(jié)、提取元數(shù)據(jù)。
  • 自動化工作流:批量處理 PDF(如添加水印、加密)。
  • 數(shù)據(jù)提取:從 PDF 提取文本或圖像用于分析。
  • 電子書管理:調整頁面順序或裁剪邊距。
  • 安全管理:為敏感文檔設置密碼。

示例(提取所有頁面文本)

from pypdf import PdfReader

reader = PdfReader("example.pdf")
text = ""
for page in reader.pages:
    text += page.extract_text() or ""
print(text[:200])  # 輸出前 200 字符

6. 注意事項

  • 文本提取
    • 掃描或圖像型 PDF 需先用 OCR 工具(如 pytesseract)處理。
    • 復雜布局可能導致文本順序錯誤。
  • 加密限制
    • 某些高強度加密可能需要 pycryptodome。
    • 解密需正確密碼,否則拋出異常。
  • 文件路徑
    • 確保文件路徑正確,建議使用 pathlib 或絕對路徑。
  • 版本兼容性
    • pypdf(≥3.0.0)與 PyPDF2 不完全兼容,舊代碼需調整。
    • 最新版本(5.0.1,截至 2025)優(yōu)化了性能和 API。
  • 錯誤處理
    • 處理 FileNotFoundError(文件不存在)。
    • 處理 PdfReadError(文件損壞或加密)。

7. 綜合示例

以下是一個綜合示例,展示讀取、合并、加密和提取文本:

from pypdf import PdfReader, PdfWriter, PdfMerger

# 讀取 PDF 元數(shù)據(jù)和文本
reader = PdfReader("input.pdf")
print("Metadata:", reader.metadata)
print("Page count:", len(reader.pages))
print("First page text:", reader.pages[0].extract_text()[:100])

# 合并多個 PDF
merger = PdfMerger()
merger.append("input1.pdf")
merger.append("input2.pdf")
merger.write("merged.pdf")
merger.close()

# 加密合并后的 PDF
reader = PdfReader("merged.pdf")
writer = PdfWriter()
for page in reader.pages:
    writer.add_page(page.rotate(90))  # 旋轉頁面
writer.encrypt(user_password="secret", algorithm="AES-256")
with open("encrypted_rotated.pdf", "wb") as f:
    writer.write(f)

說明

  • 讀取元數(shù)據(jù)和文本。
  • 合并兩個 PDF。
  • 旋轉頁面并加密輸出。

8. 資源與文檔

到此這篇關于Python中pypdf庫處理PDF文件的詳細說明和常見用法的文章就介紹到這了,更多相關Python pypdf庫處理PDF文件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Django多app路由分發(fā)(純后端)

    Django多app路由分發(fā)(純后端)

    本文主要介紹了Django多app路由分發(fā),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Python?CNN卷積神經(jīng)網(wǎng)絡實戰(zhàn)教程深入講解

    Python?CNN卷積神經(jīng)網(wǎng)絡實戰(zhàn)教程深入講解

    CNN,即卷積神經(jīng)網(wǎng)絡,主要用于圖像識別,分類。由輸入層,卷積層,池化層,全連接層(Affline層),Softmax層疊加而成。卷積神經(jīng)網(wǎng)絡中還有一個非常重要的結構:過濾器,它作用于層與層之間(卷積層與池化層),決定了怎樣對數(shù)據(jù)進行卷積和池化
    2022-12-12
  • Python爬取幾千條相親文案

    Python爬取幾千條相親文案

    這篇文章主要介紹了Python爬取幾千條相親文案,其實具體的說應該是通過Python寫了一個簡單的腳本在抓取公開的相親文案,需要的小伙伴可以參考一下,希望對你有所幫助
    2021-12-12
  • Django批量覆蓋更新實現(xiàn)示例

    Django批量覆蓋更新實現(xiàn)示例

    這篇文章主要為大家介紹了Django批量覆蓋更新實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Python中如何使用多線程優(yōu)化For循環(huán)

    Python中如何使用多線程優(yōu)化For循環(huán)

    這篇文章主要為大家詳細介紹了在Python中如何使用多線程實現(xiàn)優(yōu)化For循環(huán),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-01-01
  • Python繪制餅圖、圓環(huán)圖的實例

    Python繪制餅圖、圓環(huán)圖的實例

    這篇文章主要介紹了Python繪制餅圖、圓環(huán)圖的實例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 關于Python函數(shù)參數(shù)的進階用法

    關于Python函數(shù)參數(shù)的進階用法

    這篇文章主要給大家分享的是Python函數(shù)參數(shù)的進階用法,Python函數(shù)的參數(shù)根據(jù)函數(shù) 在調用時 傳參的形式分為關鍵字參數(shù)和位置參數(shù),下面文章小編就來介紹相關資料,需要的朋友可以參考一下
    2021-10-10
  • Python接口自動化之cookie、session應用詳解

    Python接口自動化之cookie、session應用詳解

    本文主要介紹cookie、session原理及在自動化過程中如何利用cookie、session保持會話狀態(tài)的應用,有需要的朋友可以參考下,希望可以有所幫助
    2021-08-08
  • Python 在區(qū)塊鏈智能合約開發(fā)中的應用與實踐小結

    Python 在區(qū)塊鏈智能合約開發(fā)中的應用與實踐小結

    Python作為一種廣泛應用的編程語言,在區(qū)塊鏈智能合約開發(fā)中扮演著重要角色,通過使用Python框架如Brownie和Web3.py,開發(fā)者可以輕松編寫和部署智能合約,感興趣的朋友一起看看吧
    2024-09-09
  • Python自然語言處理停用詞過濾實例詳解

    Python自然語言處理停用詞過濾實例詳解

    這篇文章主要為大家介紹了Python自然語言處理停用詞過濾實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01

最新評論