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

Python中pypdf庫(kù)處理PDF文件的詳細(xì)說(shuō)明和常見(jiàn)用法

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

前言

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

以下是對(duì) pypdf 庫(kù)的詳細(xì)說(shuō)明和常見(jiàn)用法。

1. pypdf 庫(kù)的作用

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

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

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

3. 核心功能與用法

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

3.1 讀取 PDF

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

from pypdf import PdfReader

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

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

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

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

說(shuō)明

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

3.2 合并 PDF

使用 PdfMerger 或 PdfWriter 合并多個(gè) PDF 文件。

from pypdf import PdfMerger

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

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

# 保存合并結(jié)果
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)

說(shuō)明

  • PdfMerger 更適合簡(jiǎn)單合并任務(wù)。
  • PdfWriter 提供更靈活的控制。

3.3 拆分 PDF

將 PDF 拆分為單個(gè)頁(yè)面或指定范圍。

from pypdf import PdfReader, PdfWriter

reader = PdfReader("example.pdf")

# 拆分每一頁(yè)為單獨(dú) 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)

說(shuō)明

  • 每個(gè)頁(yè)面保存為單獨(dú)文件。
  • 可通過(guò)索引選擇特定頁(yè)面范圍。

3.4 旋轉(zhuǎn)頁(yè)面

旋轉(zhuǎn) PDF 的頁(yè)面。

from pypdf import PdfReader, PdfWriter

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

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

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

說(shuō)明

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

3.5 加密/解密 PDF

為 PDF 設(shè)置密碼或解鎖受保護(hù)的 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())

說(shuō)明

  • 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)

說(shuō)明

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

4. 性能與特點(diǎn)

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

5. 實(shí)際應(yīng)用場(chǎng)景

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

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

from pypdf import PdfReader

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

6. 注意事項(xiàng)

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

7. 綜合示例

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

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])

# 合并多個(gè) 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))  # 旋轉(zhuǎn)頁(yè)面
writer.encrypt(user_password="secret", algorithm="AES-256")
with open("encrypted_rotated.pdf", "wb") as f:
    writer.write(f)

說(shuō)明

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

8. 資源與文檔

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

相關(guān)文章

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

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

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

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

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

    Python爬取幾千條相親文案

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

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

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

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

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

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

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

    關(guān)于Python函數(shù)參數(shù)的進(jìn)階用法

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

    Python接口自動(dòng)化之cookie、session應(yīng)用詳解

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

    Python 在區(qū)塊鏈智能合約開(kāi)發(fā)中的應(yīng)用與實(shí)踐小結(jié)

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

    Python自然語(yǔ)言處理停用詞過(guò)濾實(shí)例詳解

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

最新評(píng)論