расшифровать один из многих PDF-файлов для объединения в один в Python

1

Я работаю над объединением многих PDF файлов под одной папкой в один PDF файл с использованием Python. Однако я знаю, что у одного из этих файлов PDF есть пароль, поэтому мне нужно его расшифровать, пароль: rosebud.

Я думаю, что мой код действительно расшифровывает этот файл, когда я просматриваю все файлы PDF в этой папке, но я все время получаю ошибку: PyPDF2.utils.PdfReadError: файл не был расшифрован.

Мой код:

import PyPDF2, os

pdfFiles=[]
pdfFiles = [filename for filename in os.listdir('.') if filename.endswith('.pdf')]   
pdfFiles.sort(key=str.lower)
pdfwriter=PyPDF2.PdfFileWriter()


#loop through all the PDF file
for filename in pdfFiles:
    pdfReader=PyPDF2.PdfFileReader(open(filename,'rb'))
    if pdfReader.isEncrypted:
           pdfReader.decrypt('rosebud')

#all page except first:0
    for pagenum in range(1,pdfReader.numPages):
        pageObj=pdfReader.getPage(pagenum)
        pdfwriter.addPage(pageObj)

        pdfoutput=open('allmyfile.pdf','wb')
        pdfwriter.write(pdfoutput)
        pdfoutput.close()

Спасибо

Теги:
pypdf2

1 ответ

2
Лучший ответ

Скорее всего, ваш код на самом деле не расшифровывает файл.

Метод decrypt не вызывает исключения, если дешифрование не выполняется; он возвращает 0. Поскольку вы игнорируете это возвращаемое значение, у вас нет способа узнать, действительно ли это удалось.

И если дешифрование PyPDF2.utils.PdfReadError: File has not been decrypted неудачно, вы получите PyPDF2.utils.PdfReadError: File has not been decrypted когда вы позже попытаетесь прочитать файл.

Вы должны изменить свой код, чтобы сделать что-то вроде этого:

if pdfReader.isEncrypted:
    decrypt = pdfReader.decrypt('rosebud')
    if decrypt == 0:
        # print a warning and skip the file? raise an exception?

Конечно, чтобы исправить эту проблему, вам нужно использовать правильный пароль для расшифровки PDF файлов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню