最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

1. pypdf 庫的作用

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

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

  • Python 版本:支持 Python 3.6+(推薦 3.8+)。
  • 依賴:無強(qiáng)制外部依賴,可選依賴:
    • Pillow:處理 PDF 中的圖像。
    • pycryptodome:支持加密/解密。
  • 安裝命令
    pip install pypdf
    
  • 可選擴(kuò)展
    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ù)(如標(biāo)題、作者)。
  • reader.pages 是一個頁面列表,pages[i] 返回第 i 頁(從 0 開始)。
  • page.extract_text() 提取頁面文本(效果依賴 PDF 結(jié)構(gòu),可能不完整)。

3.2 合并 PDF

使用 PdfMerger 或 PdfWriter 合并多個 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)

說明

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

3.3 拆分 PDF

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

from pypdf import PdfReader, PdfWriter

reader = PdfReader("example.pdf")

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

說明

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

3.4 旋轉(zhuǎn)頁面

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

from pypdf import PdfReader, PdfWriter

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

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

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

說明

  • page.rotate(angle) 接受角度(順時針,90 的倍數(shù))。
  • 旋轉(zhuǎn)后的頁面添加到新 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())

說明

  • 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 是圖像的二進(jìn)制數(shù)據(jù)。

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

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

5. 實際應(yīng)用場景

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

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

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)處理。
    • 復(fù)雜布局可能導(dǎo)致文本順序錯誤。
  • 加密限制
    • 某些高強(qiáng)度加密可能需要 pycryptodome。
    • 解密需正確密碼,否則拋出異常。
  • 文件路徑
    • 確保文件路徑正確,建議使用 pathlib 或絕對路徑。
  • 版本兼容性
    • pypdf(≥3.0.0)與 PyPDF2 不完全兼容,舊代碼需調(diào)整。
    • 最新版本(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))  # 旋轉(zhuǎn)頁面
writer.encrypt(user_password="secret", algorithm="AES-256")
with open("encrypted_rotated.pdf", "wb") as f:
    writer.write(f)

說明

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

8. 資源與文檔

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

相關(guān)文章

最新評論

仙游县| 肇源县| 丹东市| 余庆县| 泉州市| 重庆市| 霍林郭勒市| 汾阳市| 宜川县| 太保市| 武宣县| 邹城市| 庄浪县| 鲁甸县| 呼图壁县| 河源市| 麟游县| 丹东市| 九寨沟县| 宁明县| 含山县| 永和县| 福泉市| 辽阳县| 莎车县| 泰和县| 五莲县| 米脂县| 厦门市| 洛川县| 苏尼特右旗| 台北县| 龙南县| 永平县| 龙井市| 兴宁市| 千阳县| 衡水市| 嵊泗县| 芜湖县| 临朐县|