PyPDF2:解密文件并将其与PDF列表的其他成员合并

时间:2020-01-02 19:32:35

标签: python python-3.x pdf encryption pypdf2

我正在尝试使工作中的某些流程自动化。我能够从列表中合并PDF,并能够将合并的PDF创建加密的PDF。现在,我坚持尝试获取现有的加密PDF,对其进行解密并将其与列表的其他成员合并。每次解密并尝试与未加密的PDF合并时,我的错误消息均显示为“文件尚未解密”。下面是我的代码,直到需要合并加密和未加密的PDF为止。

PyPDF2仅允许您使用解密方法读取加密的PDF吗?是否应该为加密的PDF创建一个新列表并将其附加到该列表?是否可以解密PDF,复制其内容并创建新的未加密文件?任何帮助将非常感激。谢谢。

import os
import PyPDF2
os.chdir(r'C:\Users\######\Downloads')

#Here I merge Two dummy PDFs 
pdfs = ['Gateway Parking Form.pdf', 'sample.pdf']
merger = PyPDF2.PdfFileMerger()
for pdf in pdfs:
    merger.append(pdf)
merger.write("result.pdf")
merger.close

#Here I copy the contents of the merged file to create a new encrypted PDF
pdfFile = open("result.pdf", "rb")
pdfReader = PyPDF2.PdfFileReader(pdfFile)
pdfWriter = PyPDF2.PdfFileWriter()
for pageNum in range(pdfReader.numPages):
    pdfWriter.addPage(pdfReader.getPage(pageNum))
pdfWriter.encrypt("HelloDude")
resultPdf = open("result_Client.pdf", "wb")
pdfWriter.write(resultPdf)
pdfFile.close()
resultPdf.close()

#Here I WANT to decrypt the password-protected PDF and merge it with two dummy PDFs
pdfs = ['Gateway Parking Form.pdf', 'sample.pdf', "result_Client.pdf"]
for pdf in pdfs:
    pdfFile = open(pdf, "rb")
    reader = PyPDF2.PdfFileReader(pdfFile)
    writer = PyPDF2.PdfFileWriter()
    if reader.isEncrypted:
        reader.decrypt("HelloDude")

1 个答案:

答案 0 :(得分:0)

def decryption(input_name,output_name,password):
    pdfFile = open(input_name, "rb")
    reader = PyPDF2.PdfFileReader(pdfFile)
    writer = PyPDF2.PdfFileWriter()
    if reader.isEncrypted:
        reader.decrypt(password)
    for pageNum in range(reader.numPages):
        writer.addPage(reader.getPage(pageNum))
    resultPdf = open(output_name, "wb")
    writer.write(resultPdf)
    pdfFile.close()
    resultPdf.close()
相关问题