使用Python实现为PDF文档设置和移除密码
作者:Eiceblue
在数字化时代,文档的安全性变得越来越重要。特别是对于包含敏感信息的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实现PDF加密解密的方法,希望对大家有所帮助
Python实现PDF解密
实现代码
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: #创建解密后的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:\考研\301数学一\数学书\数学书\2024kaoyanmath1.pdf', '')
Python取消pdf密码保护
实现代码
# 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
# 创建读实例
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实现为PDF文档设置和移除密码的文章就介绍到这了,更多相关Python PDF设置移除密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
