Шифрование многих PDF-файлов с помощью Python с использованием PyPDF2 - PullRequest
1 голос
/ 21 марта 2019

Я пытаюсь создать программу на Python, которая просматривает все файлы в папке, выбирает файлы с расширением .pdf и шифрует их с ограниченными разрешениями. Я использую эту версию библиотеки PyPDF2: https://github.com/vchatterji/PyPDF2. (модификация оригинального PyPDF2, которая также позволяет устанавливать разрешения). Я проверил это с одним файлом PDF, и он отлично работает. Я хочу, чтобы оригинальный файл PDF был удален, а зашифрованный должен остаться с тем же именем. Вот мой код:

import os
import PyPDF2

directory = './'

for filename in os.listdir(directory):
    if filename.endswith(".pdf"): 
        pdfFile = open(filename, 'rb')
        pdfReader = PyPDF2.PdfFileReader(pdfFile)
        pdfWriter = PyPDF2.PdfFileWriter()
        for pageNum in range(pdfReader.numPages):
            pdfWriter.addPage(pdfReader.getPage(pageNum))
        pdfFile.close()
        os.remove(filename)
        pdfWriter.encrypt('', 'ispat', perm_mask=-3904)
        resultPdf = open(filename, 'wb')
        pdfWriter.write(resultPdf)
        resultPdf.close()
        continue
    else:
        continue

выдает следующую ошибку:

  C:\Users\manul\Desktop\ghh>python encrypter.py
  Traceback (most recent call last):
  File "encrypter.py", line 9, in <module>
  pdfReader = PyPDF2.PdfFileReader(pdfFile)
  File "C:\Users\manul\AppData\Local\Programs\Python\Python37\lib\site-packages\PyPDF2\pdf.py", line 1153, in __init__
  self.read(stream)
  File "C:\Users\manul\AppData\Local\Programs\Python\Python37\lib\site-packages\PyPDF2\pdf.py", line 1758, in read
    stream.seek(-1, 2)
  OSError: [Errno 22] Invalid argument

У меня есть несколько PDF-файлов, хранящихся в папке 'ghh' на рабочем столе. Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 21 марта 2019

Использование pdfReader = PyPDF2.PdfFileReader(filename) заставит читателя работать, но эта конкретная ошибка вызвана тем, что ваши файлы пусты.Вы можете проверить размеры файла с os.path.getsize(filename).Ваши файлы, вероятно, были стерты, потому что скрипт удаляет исходный файл, затем создает новый файл с open(filepath, "wb"), а затем он некорректно завершает работу из-за ошибки, возникающей с pdfWriter.write(resultPdf), оставляя пустой файл с исходным именем файла.

Передача имени файла вместо файлового объекта в PdfFileReader, как уже упоминалось, устраняет ошибку, возникающую при pdfWriter (я не знаю почему), но вам необходимо заменить все пустые файлы в вашемкаталог с копиями оригинальных PDF-файлов, чтобы избавиться от OSError.

...