Я работаю над объединением многих 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()
Спасибо
Скорее всего, ваш код на самом деле не расшифровывает файл.
Метод 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 файлов.