使用Python實現(xiàn)為PDF文檔設置和移除密碼
在數字化時代,文檔的安全性變得越來越重要。特別是對于包含敏感信息的PDF文件,確保其不被未經授權的人員訪問或修改是至關重要的。本文將介紹如何使用Python在PDF文檔中設置密碼,以及如何移除已經設置的密碼。
首先,我們需要安裝第三方庫 Spire.PDF for Python。可以下載后手動安裝或者使用以下pip命令安裝:
pip install Spire.PDF
PDF加密基礎知識
我們可以給PDF文件設置密碼或禁止某些功能來保護PDF。加密PDF時有以下兩種類型的密碼:
打開密碼或稱用戶密碼(open password):這是訪問PDF文件所需的密碼。設置了用戶密碼后,每次打開文件時都需要輸入正確的密碼。
權限密碼(permissions password):控制對PDF文件的操作權限,例如是否允許打印、復制或編輯文檔等。
兩種密碼結合使用可以為PDF文件提供多層次的安全保護。
在Python中,我們也可以使用Spire.PDF for Python提供的 PdfDocument.Security.Encrypt(openPassword: string, permissionPassword: string, permissions: PdfPermissionsFlags, keySize: PdfEncryptionKeySize) 方法為PDF文檔設置這兩種密碼。
代碼示例如下:
Python 為PDF文檔設置密碼
from spire.pdf.common import * from spire.pdf import * # 加載PDF文件 pdf = PdfDocument() pdf.LoadFromFile("示例文檔.pdf") # 用指定密碼加密 PDF 文件, 并設置操作權限和密鑰大小 pdf.Security.Encrypt("123", "abc", PdfPermissionsFlags.Print, PdfEncryptionKeySize.Key128Bit) # 保存加密的PDF文件 pdf.SaveToFile("加密PDF文檔.pdf", FileFormat.PDF) 以上代碼為PDF文檔設置了打開密碼和權限密碼,并允許打印操作和指定了一個 128 位的加密密鑰大小。Spire.PDF for Python還支持40位(Key40Bit)和256位(Key256Bit)密鑰大小。
加密的PDF文檔:
使用密碼打開后其權限限制如圖:
Python移除PDF文檔中的密碼
from spire.pdf.common import * from spire.pdf import * # 加載已加密的PDF文檔 pdf = PdfDocument() pdf.LoadFromFile("加密PDF文檔.pdf", "123") # 將打開密碼和權限密碼設置為空 pdf.Security.Encrypt(str(), str(), PdfPermissionsFlags.Default, PdfEncryptionKeySize.Key128Bit, "abc") # 保存PDF文檔 pdf.SaveToFile("解除PDF密碼.pdf", FileFormat.PDF) 在這個示例中,我們先使用設置的密碼打開PDF文檔后,然后再次調用Encrypt()方法并將PDF用戶密碼和權限密碼這兩個參數設置為空,即可刪除PDF文件中的密碼。
知識補充
除了上文的內容,小編還為大家整理了一些Python實現(xiàn)PDF加密解密的方法,希望對大家有所幫助
Python實現(xiàn)PDF解密
實現(xiàn)代碼
from PyPDF2 import PdfReader #pdf的讀取方法 from PyPDF2 import PdfWriter #pdf的寫入方法 from Crypto.Cipher import AES #高加密的方法,要引入不然會報錯 def get_reader(filename, password): #讀取pdf的方法(自定義函數) try: old_file = open(filename, 'rb') print('解密開始...') except Exception as err: return print('文件打開失??!' + str(err)) #如果是python2將PdfReader改為PdfFileReader pdf_reader = PdfReader(old_file, strict=False) #讀取pdf文件 # 如果是python2將is_encrypted改為isEncrypted if pdf_reader.is_encrypted: #解密操作(以下操作是自適應,不會展示在終端中) if password is None: return print('文件被加密,需要密碼!--{}'.format(filename)) else: if pdf_reader.decrypt(password) != 1: return print('密碼不正確!--{}'.format(filename)) elif old_file in locals(): old_file.close() #如果pdf文件已經在本地了就關閉 return pdf_reader #返回讀出pdf的值 def deception_pdf(filename, password, decrypted_filename=None): #生成新pdf的方法(自定義函數) print('正在生成解密...') pdf_reader = get_reader(filename, password) #得到傳入的文件名,和密碼(如果密碼沒有可以不填) if pdf_reader is None: return print("無內容讀取") # 如果是python2將is_encrypted改為isEncrypted elif not pdf_reader.is_encrypted: return print('文件沒有被加密,無需操作') # 如果是python2將PdfWriter改為PdfFileWriter pdf_writer = PdfWriter() #寫pdf(記錄pdf內容) #如果是python2將append_pages_from_reader改為appendPagesFromReader pdf_writer.append_pages_from_reader(pdf_reader) if decrypted_filename is None: #創(chuàng)建解密后的pdf文件和展示文件的路徑 decrypted_filename = "".join(filename.split('.')[:-1]) + '_' + '已解密' + '.pdf' print("解密文件已生成:{}".format(decrypted_filename)) # 寫入新文件 pdf_writer.write(open(decrypted_filename, 'wb')) if __name__ == '__main__': # 逗號前面的為需要解密的pdf文件路徑,后面的''里面為密碼,如果不知道就用不填 deception_pdf(r'E:\考研\(zhòng)301數學一\數學書\數學書\2024kaoyanmath1.pdf', '')
Python取消pdf密碼保護
實現(xiàn)代碼
# coding:utf-8 import os import PyPDF2 def get_reader(filename, password): try: old_file = open(filename, 'rb') except Exception as err: print('文件打開失??!' + str(err)) return None # 創(chuàng)建讀實例 pdf_reader = PyPDF2.PdfReader(old_file, strict=False) # 解密操作 if pdf_reader.is_encrypted: if password is None: print('%s文件被加密,需要密碼!' % filename) return None else: if pdf_reader.decrypt(password) != 1: print('%s密碼不正確!' % filename) return None if old_file in locals(): old_file.close() return pdf_reader def decrypt_pdf(filename, password, decrypted_filename=None): """ 將加密的文件及逆行解密,并生成一個無需密碼pdf文件 :param filename: 原先加密的pdf文件 :param password: 對應的密碼 :param decrypted_filename: 解密之后的文件名 :return: """ # 生成一個Reader和Writer print('run 文件解密') pdf_reader = get_reader(filename, password) if pdf_reader is None: return if not pdf_reader.is_encrypted: print('文件沒有被加密,無需操作!') return pdf_writer = PyPDF2.PdfWriter() pdf_writer.append_pages_from_reader(pdf_reader) if decrypted_filename is None: decrypted_filename = "".join(filename.split('.')[:-1]) + '_' + 'decrypted' + '.pdf' print('文件解密完成!') # 寫入新文件 pdf_writer.write(open(decrypted_filename, 'wb')) decrypt_pdf(r'xxx.pdf', '666')
到此這篇關于使用Python實現(xiàn)為PDF文檔設置和移除密碼的文章就介紹到這了,更多相關Python PDF設置移除密碼內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python畫圖常用代碼總結大全(20個畫圖代碼現(xiàn)拿現(xiàn)用)
Python是一種高級編程語言,擁有豐富的圖形庫,可以完成繪制各種類型的圖形任務,下面這篇文章主要給大家介紹了關于Python畫圖常用代碼的相關資料,文中介紹的這20個畫圖代碼可以現(xiàn)拿現(xiàn)用,需要的朋友可以參考下2023-06-06python通過urllib2獲取帶有中文參數url內容的方法
這篇文章主要介紹了python通過urllib2獲取帶有中文參數url內容的方法,涉及Python中文編碼的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03Python將8位的圖片轉為24位的圖片實現(xiàn)方法
這篇文章主要介紹了Python將8位的圖片轉為24位的圖片的實現(xiàn)代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-10-10Python基于PyGraphics包實現(xiàn)圖片截取功能的方法
這篇文章主要介紹了Python基于PyGraphics包實現(xiàn)圖片截取功能的方法,涉及PyGraphics包的安裝及基于PyGraphics包實現(xiàn)圖片的打開、讀取、截取等相關操作技巧,需要的朋友可以參考下2017-12-12