【发布时间】:2022-01-17 12:16:31
【问题描述】:
我要做的是从选定的目录中读取所有的pdf文件, 然后我对从目录中获得的所有 pdf 执行 for 循环。 然后我用给定的密码保护文件。
假设我有 5 个文件要用给定的密码保护。 第一个使用正确内容成功保护的文件。 但直到五个文件内容的第二个文件与前一个文件内容合并。
第二个文件中的例子有一个第一个文件内容和第二个文件内容。 第三个文件内容有第一个文件、第二个文件和第三个文件内容。
这是代码:
import os
import datetime
from PyPDF2 import PdfFileReader, PdfFileWriter
def is_encrypted(filename: str) -> bool:
with open(filename, 'rb') as f:
pdf_reader = PdfFileReader(f, strict=False)
return pdf_reader.isEncrypted
curdate = datetime.date.today()
folder = os.getcwd()+"\\"+curdate.strftime("%d-%m-%Y")
pdf2merge = []
for filename in os.listdir(folder):
#print(filename)
if filename.endswith('.pdf'):
pdf2merge.append(filename)
pdf2merge.sort()
pdf_writer = PdfFileWriter()
for counter, filename in enumerate(pdf2merge):
path_file = folder+'/'+filename
splitExt = filename.split('.')
splitExt.pop()
joinName = '_'.join(splitExt)
splitFile = joinName.split('_')
password = splitFile.pop()
enc_filename = str('_'.join(splitFile))+".pdf"
output_file = "payslip-encrypted/"+enc_filename
if is_encrypted(path_file):
print("PDF File "+filename+" is already encrypted.")
try:
pdfFile = open(path_file, 'rb')
pdf_reader = PdfFileReader(pdfFile, strict=False)
for page_number in range(pdf_reader.numPages):
pdf_writer.addPage(pdf_reader.getPage(page_number))
except utils.PdfReadError:
print("Error while reading PDF file "+filename)
pdf_writer.encrypt(user_pwd=password, use_128bit=True)
pdfOut = open(output_file, "wb")
pdf_writer.write(pdfOut)
pdfOut.close()
pdfFile.close()
print("PDF file "+os.getcwd()+"\payslip-encrypted\\"+enc_filename+" encrypted successfully")
请更正代码,因此每个文件的内容都是正确的
【问题讨论】:
-
为您正在处理的每个文件构建并关闭 pdf_writer。您可能还想了解操作文件路径的最佳方法
-
嗨@JCaesar 有什么参考或建议让我学习操作文件路径的最佳方法吗?
-
也许您可以确切地解释您想要实现的目标——尤其是在所有奇怪的文件名拆分的情况下。此外,由于缺少 utils,呈现的代码无法运行。此外,您检查文件是否已经加密,但无论如何都要加密!
标签: python pdf encryption