'OSError: [Errno 22] Invalid argument' при объединении файлов с использованием PyPDF2 - PullRequest
0 голосов
/ 28 мая 2020

Я просто пытаюсь объединить некоторые файлы PDF, используя python, а точнее PyPDF2. Достаточно просто, но почему-то выдает ошибку, которую просто не понимаю.

В поисках решения я обнаружил, что эта проблема была и у других людей. Однако для меня не было опубликовано удовлетворительное решение.

Мой код для слияния файлов:

from PyPDF2 import PdfFileMerger

def merge(self, work_files, destination_file):
    pdf_merger = PdfFileMerger()

    for pdf in work_files:
        pdf_merger.append(pdf)
        #also tried the following with the same results:
        #with open(pdf, 'wb') as fileobj:
            #merger.append(fileobj)

    with open(destination_file, 'wb') as fileobj:
      pdf_merger.write(fileobj)

, тогда как work_files - это список путей к PDF-файлам для слияния и destination_file это файл, в который предполагается сохранить объединенный PDF-файл.

Это приводит к следующей ошибке (полная трассировка стека предоставляется по запросу):

Traceback (most recent call last):
      File "main.py", line 9, in <module>
         merger.append(fileobj)
      File "/home/user/.local/lib/python3.8/sitepackages/PyPDF2/merger.py",line 203, 
      in append
         self.merge(len(self.pages), fileobj, bookmark, pages, 
      import_bookmarks)
      File "/home/user/.local/lib/python3.8/site- 
      packages/PyPDF2/merger.py",
      line 133, in merge
         pdfr = PdfFileReader(fileobj, strict=self.strict)
      File "/home/user/.local/lib/python3.8/site- 
      packages/PyPDF2/pdf.py", line 1084, 
      in __init__
         self.read(stream)
      File "/home/user/.local/lib/python3.8/site 
      packages/PyPDF2/pdf.py", line 1689, 
      in read
         stream.seek(-1, 2)
    OSError: [Errno 22] Invalid argument

Я пробовал разные способы ввода paths, я пробовал относительные пути, абсолютные пути, а также безуспешно разбирал их в другой файл.

Я использую python 3.8 и работаю с Linux Ubuntu 20.04.

Буду благодарен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

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

0 голосов
/ 28 мая 2020

Если work_files - это только список путей , это означает, что вы передаете только строки в качестве входных данных для метода добавления, по одной за раз. Согласно документации PdfFileMerger , вам необходимо передать файловые объекты в качестве входных данных для метода добавления.

fileobj - Файловый объект или объект, который поддерживает стандартные методы чтения и поиска похож на файловый объект. Также может быть строка, представляющая путь к файлу PDF.

Извините, я пропустил последнюю часть документации, но пытались ли вы передать файловые объекты? Также можно попробовать получить имена файлов с помощью метода glob.glob (*. Pdf). Если бы вы могли опубликовать полную трассировку стека ошибки, это тоже было бы полезно.

...