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

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ú)需外部依賴(如 Adobe Acrobat)。

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

  • Python 版本:支持 Python 3.6+(推薦 3.8+)。
  • 依賴:無(wú)強(qiáng)制外部依賴,可選依賴:
    • 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 的核心類包括 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è)面文本(效果依賴 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ù)修改。
  • 局限性
    • 文本提取效果依賴 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)文章

最新評(píng)論

抚州市| 绍兴市| 从江县| 方山县| 肥东县| 西城区| 林西县| 建德市| 盖州市| 河西区| 南涧| 武陟县| 呈贡县| 泸定县| 淮滨县| 库车县| 措勤县| 金塔县| 聂荣县| 神池县| 江北区| 赞皇县| 南平市| 吐鲁番市| 舞钢市| 寻甸| 天镇县| 文成县| 即墨市| 延津县| 陇川县| 邯郸市| 伊川县| 古田县| 新龙县| 嵩明县| 灵山县| 南投县| 德令哈市| 县级市| 维西|