【问题标题】:python convert single file into multiple pdf file, but second file until the end file content merged from previous filepython将单个文件转换为多个pdf文件,但第二个文件直到最后文件内容从前一个文件合并
【发布时间】: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


【解决方案1】:

只需将pdf_writer = PdfFileWriter() 移动到循环中。

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()

for filename in pdf2merge:
    pdf_writer = PdfFileWriter()
    
    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")

【讨论】:

    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 2011-01-31
    • 2012-02-22
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多