亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python中讀取和加解密PDF文件的詳細(xì)教程

 更新時(shí)間:2024年08月16日 11:03:59   作者:景天科技苑  
在Python中讀取和加密PDF文件是一項(xiàng)常見且實(shí)用的任務(wù),尤其對于需要處理大量文檔自動化處理的場景,本文將詳細(xì)介紹如何使用Python讀取PDF文件內(nèi)容以及如何使用不同的庫來給PDF文件加密,需要的朋友可以參考下

準(zhǔn)備工作

在開始之前,確保你的Python環(huán)境已經(jīng)安裝好,并安裝了處理PDF文件所需的庫。這里我們將使用兩個(gè)主要的庫:PyPDF2用于讀取PDF內(nèi)容,PyPDF2Spire.PDF for Python用于加密PDF文件。

安裝必要的庫

安裝pdfplumber

使用pip安裝pdfplumber,這是讀取PDF文件內(nèi)容的一個(gè)常用庫。

pip install pdfplumber

安裝PyPDF2

PyPDF2是另一個(gè)用于處理PDF文件的庫,支持讀取、寫入和加密等操作。

pip install PyPDF2

安裝Spire.PDF for Python

Spire.PDF for Python是一個(gè)功能強(qiáng)大的庫,支持多種PDF操作,包括創(chuàng)建、讀取、修改和加密。不過,需要注意的是,Spire.PDF for Python并非開源庫,通常需要從其官方網(wǎng)站或授權(quán)渠道獲取。

# 注意:這里只是示例,實(shí)際安裝可能需要從官網(wǎng)下載或使用其他方式
pip install Spire.Pdf

如果無法從pip直接安裝,可以訪問Spire.PDF for Python的官方網(wǎng)站下載并安裝。

讀取PDF文件

在Python中,使用pdfplumber庫都可以很方便地讀取PDF文件的內(nèi)容。以下是一個(gè)使用PyPDF2讀取PDF文件內(nèi)容的基本示例。

我們先查看下PDF文件

在這里插入圖片描述

代碼讀取示例

def read_pdf(path):
    #pip install pdfplumber
    import pdfplumber
    with pdfplumber.open(path) as pdf:
    #    for i in range(len(pdf.pages)):
    #        page = pdf.pages[i]
    #        print(page.extract_text())
        for page in pdf.pages:
            print(page.extract_text())
if __name__ == "__main__":
    read_pdf('基于Python編寫的FTP程序.pdf')

在這里插入圖片描述

上述代碼通過extract_text函數(shù)讀取了指定路徑的PDF文件內(nèi)容,并打印出來。extract_text函數(shù)會自動處理PDF中的文本內(nèi)容,包括文本布局、字體和編碼等。

加密PDF文件

加密PDF文件是為了保護(hù)文件內(nèi)容不被未授權(quán)訪問。在Python中,可以使用PyPDF2Spire.PDF for Python庫來實(shí)現(xiàn)PDF文件的加密。

使用PyPDF2加密PDF

PyPDF2是一個(gè)強(qiáng)大的庫,用于處理PDF文件的各種操作,包括加密。以下是一個(gè)使用PyPDF2加密PDF文件的基本示例。

示例代碼

import PyPDF2

def encrypt_pdf_with_pypdf2(input_pdf, output_pdf, password):
    # 創(chuàng)建PdfFileReader和PdfFileWriter對象
    pdf_reader = PyPDF2.PdfReader(input_pdf)
    pdf_writer = PyPDF2.PdfWriter()

    # 逐頁添加內(nèi)容到寫入器
    for page_num in pdf_reader.pages:
        pdf_writer.add_page(page_num)

    # 加密PDF文件
    pdf_writer.encrypt(password)

    # 寫入加密后的PDF文件
    with open(output_pdf, 'wb') as output_file:
        pdf_writer.write(output_file)

    print(f"PDF文件 {input_pdf} 已加密, 并保存為 {output_pdf}")

# 使用示例
encrypt_pdf_with_pypdf2('基于Python編寫的FTP程序.pdf', 'encrypted_example.pdf', 'mysecretpassword')

在上述代碼中,我們首先讀取了一個(gè)PDF文件,然后逐頁將其內(nèi)容添加到PdfFileWriter對象中。最后,我們使用encrypt方法設(shè)置了一個(gè)密碼,并將加密后的PDF文件保存到新的文件中。

在這里插入圖片描述

打開pdf文件,已被加密

在這里插入圖片描述

使用Spire.PDF for Python加密PDF

雖然PyPDF2是一個(gè)很好的庫,但Spire.PDF for Python提供了更多高級功能,包括更強(qiáng)大的加密選項(xiàng)。以下是一個(gè)使用Spire.PDF for Python加密PDF文件的示例。

要加密PDF,你需要設(shè)置用戶密碼(文檔打開密碼),該密碼將用于打開和查看文件。

什么是用戶密碼(文檔打開密碼)?

用戶必須輸入該密碼才能打開和查看PDF文檔。
它限制對PDF內(nèi)容的訪問,確保只有授權(quán)個(gè)人才能訪問該文件。
用戶密碼不提供除打開PDF之外的任何其他權(quán)限或限制。
除了設(shè)置用戶或打開密碼外,你還需要設(shè)置用于保護(hù)PDF內(nèi)容的加密級別或算法。Spire.PDF for Python支持以下加密級別或算法:

40-bit RC4
128-bit RC4
128-bit AES
256-bit AES
使用Python加密PDF文件的主要步驟如下:

創(chuàng)建PdfDocument實(shí)例,并使用PdfDocument.LoadFromFile()方法加載PDF文件。
創(chuàng)建一個(gè)PdfSecurityPolicy,并設(shè)置打開文檔所需的用戶密碼。
通過PdfSecurityPolicy類中的EncryptionAlgorithm屬性設(shè)置用于保護(hù)PDF的加密算法。
使用PdfDocument.Encrypt(securityPolicy:PdfSecurityPolicy)方法應(yīng)用安全策略以加密PDF文檔。
將加密的PDF文檔保存為新文件。

示例代碼

首先,請確保你已經(jīng)正確安裝了Spire.PDF for Python庫。由于這個(gè)庫不是通過pip直接安裝的,你可能需要從其官方網(wǎng)站下載相應(yīng)的Python包,并按照提供的說明進(jìn)行安裝。

from spire.pdf import *


# 創(chuàng)建document對象
doc = PdfDocument()
# 加載需要加密的現(xiàn)有PDF文件
doc.LoadFromFile("基于Python編寫的FTP程序.pdf")

# 創(chuàng)建一個(gè)安全策略,并設(shè)置打開文檔所需的用戶密碼
securityPolicy = PdfPasswordSecurityPolicy("userpassword", str())

# 指定用于保護(hù)PDF的加密算法
securityPolicy.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES_256



# 應(yīng)用安全策略以加密PDF文檔
doc.Encrypt(securityPolicy)

# 保存加密后的PDF文檔
doc.SaveToFile("加密.pdf")

print("PDF文件 基于Python編寫的FTP程序.pdf 已加密, 并保存為 加密.pdf ")

打開加密文件,已被加密

在這里插入圖片描述

在上述代碼中,我們首先使用doc.LoadFromFile方法加載了一個(gè)PDF文件。然后,我們創(chuàng)建了一個(gè)securityPolicy加密策略,并設(shè)置了用戶密碼、所有者密碼、權(quán)限和加密級別。這里我們選擇了AES 256位加密,并允許打印、修改內(nèi)容和復(fù)制內(nèi)容。最后,我們通過調(diào)用doc.Encrypt方法應(yīng)用加密,并使用doc.SaveToFile方法保存加密后的PDF文件。

使用Python設(shè)置PDF的安全權(quán)限

要為PDF文檔設(shè)置安全權(quán)限,除了用戶密碼外,你還需要設(shè)置所有者密碼(權(quán)限密碼)。

什么是所有者密碼(權(quán)限密碼)?

用于控制可在PDF文檔上執(zhí)行的權(quán)限和操作。
允許文檔所有者限制某些操作,例如打印、復(fù)制、修改或從PDF中提取內(nèi)容。
所有者密碼通常比用戶密碼更強(qiáng)大,因?yàn)樗x予所有者對PDF安全設(shè)置的完全控制。

使用Python設(shè)置PDF安全權(quán)限的主要步驟如下:

  • 創(chuàng)建PdfDocument實(shí)例,并使用PdfDocument.LoadFromFile()方法加載一個(gè)PDF文件。
  • 創(chuàng)建一個(gè)PdfSecurityPolicy,并設(shè)置打開文檔所需的用戶密碼和用于限制權(quán)限的所有者密碼。
  • 通過PdfSecurityPolicy類中的EncryptionAlgorithm屬性設(shè)置用于保護(hù)PDF的加密算法。
  • 禁止所有權(quán)限,然后通過PdfSecurityPolicy類中的DocumentPrivilege屬性賦予特定權(quán)限。
  • 使用PdfDocument.Encrypt(securityPolicy:PdfSecurityPolicy)方法應(yīng)用安全策略以加密PDF文檔。
  • 將加密的PDF文檔保存為新文件。

以下代碼示例展示了如何使用Python設(shè)置PDF的安全權(quán)限:

from spire.pdf import *

# 創(chuàng)建PdfDocument對象
pdf = PdfDocument()
# 加載需要加密的現(xiàn)有PDF文件
pdf.LoadFromFile("基于Python編寫的FTP程序.pdf")

# 創(chuàng)建一個(gè)安全策略,并設(shè)置打開文檔所需的用戶密碼和用于限制權(quán)限的所有者密碼
securityPolicy = PdfPasswordSecurityPolicy("userpassword", "ownerpassword")

# 設(shè)置加密算法
securityPolicy.EncryptionAlgorithm = PdfEncryptionAlgorithm.AES_256

# 禁止所有權(quán)限
securityPolicy.DocumentPrivilege = PdfDocumentPrivilege.ForbidAll()
# 僅允許打印文檔
securityPolicy.DocumentPrivilege.AllowPrint = True

# 加密所有文檔內(nèi)容,除了元數(shù)據(jù)(可選,用于允許搜索引擎訪問文檔的元數(shù)據(jù))
# securityPolicy.EncryptMetadata = False

# 應(yīng)用安全策略以加密PDF文檔
pdf.Encrypt(securityPolicy)

# 將加密的PDF文檔保存為新文件
pdf.SaveToFile("安全權(quán)限.pdf")
pdf.Close()

運(yùn)行生成加密后的文件,打開需要密碼userpassword

在這里插入圖片描述

編輯需需要密碼ownerpassword

在這里插入圖片描述

我們看下有哪些權(quán)限

在這里插入圖片描述

注意事項(xiàng)

  • 在使用加密功能時(shí),請確保你了解不同加密級別和權(quán)限設(shè)置的影響。
  • 加密后的PDF文件將需要密碼才能打開或進(jìn)行某些操作,因此請確保你妥善保管密碼。
  • 如果你在處理大量PDF文件或需要更高級的功能(如數(shù)字簽名、表單填充等),考慮使用更專業(yè)的庫,如Spire.PDF for Python。

使用Python解密PDF

加密的PDF文件可以使用其用戶密碼或所有者密碼打開。打開后,你可以使用PdfDocument.Decrypt()方法對其進(jìn)行解密。

使用Python解密加密PDF文件的主要步驟如下:

創(chuàng)建PdfDocument實(shí)例,并使用PdfDocument.LoadFromFile()方法加載加密的PDF文件。
調(diào)用PdfDocument.Decrypt()方法解密PDF文件。
將解密后的PDF文件保存為新文件。
以下代碼示例展示了如何使用Python解密PDF文件:

from spire.pdf import *

# 創(chuàng)建PdfDocument對象
pdf = PdfDocument()
# 使用用戶密碼或所有者密碼打開加密的PDF文檔
pdf.LoadFromFile("安全權(quán)限.pdf", "userpassword")

# 解密PDF文檔
pdf.Decrypt("ownerpassword")

# 將解密后的文檔保存為新文件
pdf.SaveToFile("解密后文件.pdf")
pdf.Close()

在這里插入圖片描述

解密后的pdf直接能打開。

當(dāng)然,我們可以繼續(xù)探討一些高級話題和最佳實(shí)踐,特別是在處理PDF文件時(shí)。以下是一些額外的考慮點(diǎn)和技巧,可以幫助你更有效地在Python中處理PDF文件。

高階用法處理

1. 錯誤處理

在處理文件時(shí),錯誤處理是非常重要的。無論是讀取文件還是寫入文件,都可能會遇到各種問題,如文件不存在、權(quán)限不足、磁盤空間不足等。因此,在你的代碼中添加適當(dāng)?shù)腻e誤處理邏輯是很重要的。

try:
    # 嘗試讀取或?qū)懭隤DF文件的代碼
    # ...
except FileNotFoundError:
    print(f"文件 {file_path} 未找到。")
except PermissionError:
    print(f"沒有權(quán)限訪問文件 {file_path}。")
except Exception as e:
    print(f"處理文件時(shí)發(fā)生錯誤:{e}")

2. 批量處理

如果你需要處理多個(gè)PDF文件,編寫一個(gè)能夠批量處理這些文件的腳本將非常有用。你可以使用Python的循環(huán)結(jié)構(gòu)(如for循環(huán))來遍歷文件列表,并對每個(gè)文件執(zhí)行相同的操作。

import os

def process_pdfs(folder_path, output_folder, password):
    # 獲取文件夾中所有PDF文件的列表
    pdf_files = [f for f in os.listdir(folder_path) if f.endswith('.pdf')]

    # 遍歷文件列表并處理每個(gè)文件
    for file in pdf_files:
        input_path = os.path.join(folder_path, file)
        output_path = os.path.join(output_folder, f"encrypted_{file}")
        
        # 這里可以調(diào)用加密函數(shù)
        # encrypt_pdf(input_path, output_path, password)
        
        # 示例:僅打印將要處理的文件路徑
        print(f"正在處理 {input_path} ...")

# 使用示例
process_pdfs('input_pdfs', 'output_pdfs', 'mysecretpassword')

3. 加密選項(xiàng)的深入理解

當(dāng)你使用PyPDF2Spire.PDF for Python等庫加密PDF文件時(shí),了解不同的加密選項(xiàng)和權(quán)限設(shè)置是非常重要的。例如,你可以設(shè)置不同的用戶密碼和所有者密碼,以及控制哪些操作(如打印、修改、復(fù)制等)被允許。

  • 用戶密碼:用于打開和查看PDF文件。
  • 所有者密碼:用于修改PDF文件的加密設(shè)置,包括更改密碼和權(quán)限。
  • 權(quán)限:定義了對PDF文件可以執(zhí)行哪些操作,如打印、修改內(nèi)容、復(fù)制內(nèi)容等。

4. 性能優(yōu)化

如果你需要處理大型PDF文件或大量文件,性能可能會成為一個(gè)問題。以下是一些優(yōu)化性能的方法:

  • 使用多線程或多進(jìn)程:Python的threadingmultiprocessing模塊可以幫助你并行處理多個(gè)文件,從而加快處理速度。
  • 內(nèi)存管理:確保你的腳本不會消耗過多的內(nèi)存。在處理大型文件時(shí),考慮使用流式處理或分批處理文件內(nèi)容。
  • 選擇高效的庫:不同的庫在處理PDF文件時(shí)的性能可能會有所不同。根據(jù)你的具體需求選擇最合適的庫。

5. 安全性考慮

當(dāng)你加密PDF文件時(shí),請確保你使用的加密方法和密碼足夠強(qiáng)大,以防止未經(jīng)授權(quán)的訪問。以下是一些安全性考慮點(diǎn):

  • 使用強(qiáng)密碼:選擇包含大小寫字母、數(shù)字和特殊字符的復(fù)雜密碼。
  • 定期更改密碼:如果你經(jīng)常處理敏感信息,請定期更改你的加密密碼。
  • 了解加密算法的局限性:雖然AES等現(xiàn)代加密算法非常強(qiáng)大,但它們也有其局限性。了解你選擇的加密算法的優(yōu)缺點(diǎn)是很重要的。

6. 學(xué)習(xí)和探索

PDF處理是一個(gè)廣泛而復(fù)雜的領(lǐng)域,有許多不同的庫和工具可供選擇。除了PyPDF2Spire.PDF for Python之外,還有其他一些流行的庫,如pdfplumber(用于提取文本和表格)、ReportLab(用于創(chuàng)建PDF文件)等?;〞r(shí)間學(xué)習(xí)和探索這些庫將幫助你更好地處理PDF文件。

希望這些額外的信息和技巧對你有所幫助!如果你有任何其他問題或需要進(jìn)一步的幫助,請隨時(shí)提問。

總結(jié)

在Python中讀取和加密PDF文件是一個(gè)相對直接的過程,通過使用PyPDF2Spire.PDF for Python等庫,你可以輕松地實(shí)現(xiàn)這些功能。根據(jù)你的具體需求(如加密級別、性能要求、預(yù)算等),你可以選擇最適合你的庫。希望本文對你有所幫助!

以上就是Python中讀取和加解密PDF文件的詳細(xì)教程的詳細(xì)內(nèi)容,更多關(guān)于Python讀取和加解密PDF的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • M1芯片安裝python3.9.1的實(shí)現(xiàn)

    M1芯片安裝python3.9.1的實(shí)現(xiàn)

    這篇文章主要介紹了M1芯片安裝python3.9.1的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 使用python刪除nginx緩存文件示例(python文件操作)

    使用python刪除nginx緩存文件示例(python文件操作)

    這篇文章主要介紹了使用python刪除nginx緩存文件示例(python文件操作),需要的朋友可以參考下
    2014-03-03
  • Python 判斷是否為質(zhì)數(shù)或素?cái)?shù)的實(shí)例

    Python 判斷是否為質(zhì)數(shù)或素?cái)?shù)的實(shí)例

    下面小編就為大家?guī)硪黄狿ython 判斷是否為質(zhì)數(shù)或素?cái)?shù)的實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • 探索Python庫coconut輕松地編寫函數(shù)式代碼實(shí)例

    探索Python庫coconut輕松地編寫函數(shù)式代碼實(shí)例

    本文將介紹Python Coconut的基本概念、語法特性和實(shí)際應(yīng)用,同時(shí)提供豐富的示例代碼,以幫助大家更好地理解和應(yīng)用這個(gè)強(qiáng)大的工具
    2024-01-01
  • 代碼詳解Python的函數(shù)基礎(chǔ)(1)

    代碼詳解Python的函數(shù)基礎(chǔ)(1)

    這篇文章主要為大家詳細(xì)介紹了Python的函數(shù)基礎(chǔ),使用了函數(shù)調(diào)用和函數(shù)定義,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Python字符串對象實(shí)現(xiàn)原理詳解

    Python字符串對象實(shí)現(xiàn)原理詳解

    這篇文章主要介紹了Python字符串對象實(shí)現(xiàn)原理詳解,在Python世界中將對象分為兩種:一種是定長對象,比如整數(shù),整數(shù)對象定義的時(shí)候就能確定它所占用的內(nèi)存空間大小,另一種是變長對象,在對象定義時(shí)并不知道是多少,需要的朋友可以參考下
    2019-07-07
  • 講解Python?中的?with?關(guān)鍵字

    講解Python?中的?with?關(guān)鍵字

    這篇文章主要介紹了講解Python?中的with關(guān)鍵字,文章基于python的相關(guān)資料展開?with?語句的一些基本概念和用法及其底層工作原理,下文更多內(nèi)容感興趣的小伙伴可以參考一下
    2022-05-05
  • 使用Python操作excel文件的實(shí)例代碼

    使用Python操作excel文件的實(shí)例代碼

    這篇文章主要介紹了使用Python操作excel文件的實(shí)例代碼,需要的朋友可以參考下
    2017-10-10
  • 150行Python代碼實(shí)現(xiàn)帶界面的數(shù)獨(dú)游戲

    150行Python代碼實(shí)現(xiàn)帶界面的數(shù)獨(dú)游戲

    這篇文章主要介紹了150行Python代碼實(shí)現(xiàn)帶界面的數(shù)獨(dú)游戲,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python網(wǎng)站驗(yàn)證碼識別

    Python網(wǎng)站驗(yàn)證碼識別

    這篇文章主要介紹了Python網(wǎng)站驗(yàn)證碼識別的相關(guān)資料,需要的朋友可以參考下
    2016-01-01

最新評論