使用Python实现为PDF文档设置和移除密码,


目录
  • PDF加密基础知识
  • Python 为PDF文档设置密码
  • Python移除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实现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设置移除密码内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

您可能感兴趣的文章:
  • Python实现PDF到Word文档的高效转换
  • 使用Python实现对PDF文件进行密码保护
  • 使用python快速获取PDF文件页数的办法
  • 使用Python合并PDF文件并添加自定义目录及页脚的全过程
  • 使用python去除PDF简单水印的示例
  • 使用Python实现查找PDF中的指定文本并高亮显示

评论关闭