Python實現(xiàn)PDF加密解密操作全攻略
日常工作中,我們常常需要處理加密的 PDF 文件。這些文件要求輸入密碼才能查看或編輯內(nèi)容,給自動化處理帶來挑戰(zhàn)。同時,我們有時也需要為 PDF 設(shè)置密碼保護敏感信息,或移除密碼以方便分享。 今天,我們來了解如何使用 Spire.PDF for Python 輕松實現(xiàn)以下操作:
- 為 PDF 文件設(shè)置密碼保護
- 從加密的 PDF 文件中移除密碼
- 判斷 PDF 文件是否加密
- 驗證并確定正確的 PDF 密碼
掌握這些技能,可以讓我們有效管理 PDF 文檔的安全性,解決加密文件帶來的訪問限制問題。
準(zhǔn)備工作
本文將要使用到的 Spire.PDF for Python 是一款功能全面的 PDF 操作庫,可以通過 Python 代碼對 PDF 中的各種元素進(jìn)行操作,如加解密操作等,不需要任何第三方工具。
如果你沒有安裝,以下有兩種方法:
- 直接在 cmd 中使用
pip install spire.pdf
命令安裝 Spire.PDF for Python: - 也可以從官網(wǎng) 下載 Spire.PDF for Python 的壓縮包,解壓縮后從“lib”文件夾中獲取 .whl 文件。 然后運行以下命令安裝 Spire.PDF for Python 。
pip install G:\spire.pdf.python_9.8.1\lib\Spire.Pdf-9.8.1-py3-none-win_amd64.whl
注意:以上命令中的 G:\...\Spire.Pdf-9.8.1-py3-none-win_amd64.whl
需要替換成你的實際路徑。
如果在安裝中遇到了問題,可以前往官方詳細(xì)的 安裝指南 獲取幫助。
Python 對 PDF 文檔進(jìn)行密碼保護
當(dāng)我們需要限制對 PDF 文件的訪問權(quán)限時,例如保護公司機密報告或客戶合同,為 PDF 設(shè)置密碼是最直接有效的方法。
對于 PDF,有兩種用于安全目的的密碼類型可供選擇: "打開密碼" 和 "權(quán)限密碼"。
- 打開密碼,也稱為用戶密碼,用于限制未經(jīng)授權(quán)訪問 PDF 文件。
- 權(quán)限密碼,也被稱為主密碼或所有者密碼,允許你對其他人能夠在 PDF 文件中執(zhí)行的操作設(shè)置各種限制。
如果一個 PDF 文件同時使用這兩種密碼進(jìn)行保護,那么可以使用任意一種密碼來打開該文件。
Spire.PDF for Python 提供了一個 PdfDocument.Security.Encrypt() 方法,讓我們可以使用打開密碼和(或)權(quán)限密碼來保護 PDF 文件。
以下是使用 Spire.PDF for Python 實現(xiàn) PDF 密碼保護的步驟:
- 創(chuàng)建一個 PdfDocument 對象。
- 使用 PdfDocument.LoadFromFile() 方法加載要加密的示例 PDF 文檔。
- 使用 PdfDocument.Security.Encrypt(String openPassword, String permissionPassword, PdfPermissionsFlags permissions, PdfEncryptionKeySize keySize) 方法來對 PDF 文件進(jìn)行加密,以設(shè)置打開密碼和權(quán)限密碼。
- 使用 PdfDocument.SaveToFile() 方法將結(jié)果保存為文件。
注:PdfDocument.Security.Encrypt() 方法,其中 PdfPermissionsFlags 參數(shù)用于指定用戶對文檔的操作權(quán)限。
from spire.pdf import * # 創(chuàng)建一個 PdfDocument 對象 doc = PdfDocument() # 從指定路徑加載示例 PDF 文件 doc.LoadFromFile("某公司數(shù)據(jù)報告.pdf") # 使用打開密碼 ("openPsd")、權(quán)限密碼 ("permissionPsd") 和允許打印權(quán)限對 PDF 文件進(jìn)行加密 doc.Security.Encrypt("openPsd", "permissionPsd", PdfPermissionsFlags.Print, PdfEncryptionKeySize.Key128Bit) # 將加密后的 PDF 文件保存到指定的文件路徑 doc.SaveToFile("加密文檔.pdf", FileFormat.PDF) # 關(guān)閉文檔 doc.Close()
(加密后的文件打開的輸入界面)
Python 從加密的 PDF 文檔中移除密碼
當(dāng)你擁有加密 PDF 的密碼,但需要移除密碼以方便文件共享或批量處理時(例如解除對歸檔文檔的訪問限制),通過再次調(diào)用 PdfDocument.Security.Encrypt() 方法,并將打開密碼和權(quán)限密碼設(shè)置為空字符串,即可解除 PDF 文件的密碼保護。
以下是關(guān)鍵步驟:
- 創(chuàng)建一個 PdfDocument 對象。
- 使用 PdfDocument.LoadFromFile(String fileName, String password) 方法加載加密- 的 PDF 文檔。
- 使用 PdfSecurity.Encrypt(String openPassword, String permissionPassword, PdfPermissionsFlags permissions, PdfEncryptionKeySize keySize, String originalPermissionPassword) 方法,通過將打開密碼和權(quán)限密碼設(shè)為空字符串來解密PDF文件。
- 使用 PdfDocument.SaveToFile() 方法保存結(jié)果文件。
from spire.pdf import * # 創(chuàng)建一個 PdfDocument 對象 doc = PdfDocument() # 使用 "openPsd" 打開密碼加載加密的 PDF 文件 doc.LoadFromFile("加密文檔.pdf", "openPsd") # 通過將打開密碼和權(quán)限密碼設(shè)為空字符串 doc.Security.Encrypt(str(), str(), PdfPermissionsFlags.Default, PdfEncryptionKeySize.Key128Bit, "permissionPsd") # 將移除密碼后的 PDF 文件保存到指定的文件路徑 doc.SaveToFile("移除密碼.pdf", FileFormat.PDF) # 關(guān)閉文檔 doc.Close()
(解密前后的PDF文件)
Python 判斷 PDF 是否加密
在批量處理大量 PDF 文件時,你可能需要先篩選出加密的文件進(jìn)行特殊處理(例如集中解密)。手動檢查每個文件是否加密效率低下且容易出錯。
Spire.PDF for Python 提供了 PdfDocument.IsPasswordProtected(fileName: str) 靜態(tài)方法,只需傳入文件路徑即可快速判斷 PDF 是否加密。
關(guān)鍵步驟如下:
- 指定輸入和輸出文件路徑。
- 使用 PdfDocument.IsPasswordProtected() 方法判斷 PDF 是否加密。
- 將判斷結(jié)果用 Python 標(biāo)準(zhǔn)庫 tkinter 以彈窗提示。
from spire.pdf import * import tkinter as tk from tkinter import messagebox # 指定輸入和輸出文件路徑 inputFile = "加密文檔.pdf" # 檢查 PDF 是否加密 isProtected = PdfDocument.IsPasswordProtected(inputFile) # 初始化主窗口(隱藏) root = tk.Tk() # 隱藏主窗口 root.withdraw() # 將結(jié)果以提示框形式顯示 messagebox.showinfo("結(jié)果", "該PDF文件" + ("已加密!" if isProtected else "未加密!"))
(運行程序彈出已加密提示)
Python 確定 PDF 的正確密碼
如果你擁有一個加密的 PDF 文件和一些可能的密碼,但不確定哪個密碼是正確的,手動逐一測試非常耗時。 雖然 Spire.PDF 沒有提供直接驗證密碼的方法,但可以通過嘗試使用密碼加載 PDF 文件并捕獲異常的方式間接驗證。如果密碼正確,加載成功;否則會拋出異常。
關(guān)鍵步驟如下:
- 指定輸入和輸出文件路徑。
- 使用 PdfDocument.IsPasswordProtected() 方法判斷 PDF 是否加密。
- 創(chuàng)建一個待測試的密碼列表。
- 如果文檔已加密,遍歷密碼列表,使用 PdfDocument.LoadFromFile(filename: str, password: str) 方法加載 PDF。
- 如果未拋出異常,則表示密碼正確;否則,密碼不正確。
- 將結(jié)果用 Python 標(biāo)準(zhǔn)庫 tkinter 以彈窗提示。
from spire.pdf import * import tkinter as tk from tkinter import messagebox # 指定輸入和輸出文件路徑 inputFile = "加密文檔.pdf" # 判斷 PDF 是否加密 isEncrypted = PdfDocument.IsPasswordProtected(inputFile) # 創(chuàng)建待測試的密碼列表 passwords = ["密碼a", "密碼b", "openPsd", "密碼c"] # 初始化主窗口(隱藏) root = tk.Tk() # 隱藏主窗口 root.withdraw() # 遍歷密碼列表 if isEncrypted: for value in passwords: try: # 嘗試使用當(dāng)前密碼加載 PDF doc = PdfDocument() doc.LoadFromFile(inputFile, value) # 如果成功,說明密碼正確 messagebox.showinfo("正確", f"密碼 {value} 正確!") break except SpireException: # 如果拋出異常,說明密碼不正確 messagebox.showerror("錯誤", f"密碼 {value} 是錯誤的!") else: messagebox.showwarning("警告", "該PDF文檔沒有加密,無需驗證密碼!")
(運行程序彈出正確密碼提示)
結(jié)語
通過本文介紹的四種方法,我們可以輕松應(yīng)對各種 PDF 加密相關(guān)需求:
- 密碼保護:有效控制 PDF 文件的訪問和操作權(quán)限
- 密碼移除:解除訪問限制,方便文件共享
- 加密狀態(tài)判斷:快速篩選加密文件進(jìn)行批量處理
- 密碼驗證:自動嘗試多個密碼,快速找到正確密碼
當(dāng)我們將這些方法集成到自動化工作流中,加密 PDF 文件的管理效率將會大幅提升,我們也得以從繁瑣而不可控的手工操作中解放出來,專注于核心業(yè)務(wù)邏輯。
到此這篇關(guān)于Python實現(xiàn)PDF加密解密操作全攻略的文章就介紹到這了,更多相關(guān)Python PDF加密解密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pd.DataFrame統(tǒng)計各列數(shù)值多少的實例
今天小編就為大家分享一篇pd.DataFrame統(tǒng)計各列數(shù)值多少的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12關(guān)于Pandas的Series創(chuàng)建方式和常用屬性
這篇文章主要介紹了關(guān)于Pandas的Series創(chuàng)建方式和常用屬性,Series 數(shù)據(jù)結(jié)構(gòu)是用于儲存一個序列的一維數(shù)組,DataFrame 數(shù)據(jù)結(jié)構(gòu)是用于存儲復(fù)雜數(shù)據(jù)的二維數(shù)據(jù)結(jié)構(gòu),本文來詳細(xì)說明一下2023-07-07詳解python中的lambda與sorted函數(shù)
這篇文章主要介紹了python中的lambda與sorted函數(shù)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-09-09