python - PyPDF2:解密文件并将其与 PDF 列表的其他成员合并
问题描述
我正在尝试使工作中的某些流程自动化。我能够合并列表中的 PDF,并能够将合并的 PDF 用于创建加密的 PDF。现在,我一直在尝试获取现有的加密 PDF,对其进行解密,然后将其与列表的其他成员合并。每次我解密并尝试与未加密的 PDF 合并时,我的错误消息都会显示“文件尚未解密”。下面是我的代码,直到我需要合并加密和未加密的 PDFS。
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")
解决方案
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()
推荐阅读
- uber-api - Uber Universal Deep Link 给出 CORS 错误
- javascript - 使用 Functions Cloud 实现数据库数据
- mlflow - mlflow 异常:使用 UUID 运行已处于活动状态
- angular - Angular 8 ngStyle 有时在循环中不起作用
- html - HTML/CSS 标记:在 HiPPI 显示器上使用 DIV 块绘制的不规则、不对称线条
- php - php redis 中的 diff b/w pset 和 psetx 是什么?是否可以将数组设置为值?
- php - node.js 类似 php 的分隔符
- python - 从右到左对齐在 Python Word Cloud 中不起作用
- xcode - 如何在 Xcode 中连接到 Gitlab 帐户?
- flutter - 为什么我不能引用对象的另一个键中的键?