Не удается объединить PDF-файлы с py2pdf - ValueError - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь объединить PDF-файлы, которые я скачал с Google Диска, и получаю эту ошибку:

ValueError: invalid literal for int() with base 10: b'F-1.4'

Этого не происходит при объединении PDF-файлов, созданных с помощью Keynote.

Полная ошибка звучит так:

Traceback (most recent call last):
  File "weekly_meeting.py", line 36, in <module>
    file_path = sort_pdf(path)
  File "weekly_meeting.py", line 15, in sort_pdf
    pdf_merger.append(file)
  File "/usr/local/lib/python3.6/site-packages/PyPDF2/merger.py", line 203, in append
    self.merge(len(self.pages), fileobj, bookmark, pages, import_bookmarks)
  File "/usr/local/lib/python3.6/site-packages/PyPDF2/merger.py", line 151, in merge
    outline = pdfr.getOutlines()
  File "/usr/local/lib/python3.6/site-packages/PyPDF2/pdf.py", line 1346, in getOutlines
    lines = catalog["/Outlines"]
  File "/usr/local/lib/python3.6/site-packages/PyPDF2/generic.py", line 516, in __getitem__
    return dict.__getitem__(self, key).getObject()
  File "/usr/local/lib/python3.6/site-packages/PyPDF2/generic.py", line 178, in getObject
    return self.pdf.getObject(self).getObject()
  File "/usr/local/lib/python3.6/site-packages/PyPDF2/pdf.py", line 1599, in getObject
    idnum, generation = self.readObjectHeader(self.stream)
  File "/usr/local/lib/python3.6/site-packages/PyPDF2/pdf.py", line 1667, in readObjectHeader
    return int(idnum), int(generation)
ValueError: invalid literal for int() with base 10: b'F-1.4'

Я пытался

  • открытие PDF-файлов - они нормально работают PDF
  • экспорт их с помощью предварительного просмотра, снова в формате PDF - они по-прежнему выдают ошибку
  • другие PDF-файлы - кажется, они работают нормально

Это мой код, проблемы, похоже, в pdf_merger.append (файл):

def sort_pdf(path):
    pdf_merger = PdfFileMerger()
    if (os.path.isdir(path)):
        head, file_name = os.path.split(path)
        os.chdir(path)
        chronology = ["OVERVIEW", "CUSTOMER", "PROJECT", "PERSONAL"]
        for prefix in chronology:
            for file in glob.glob(prefix + "*.pdf"):
                pdf_merger.append(file)
        file_path = path + "/" + file_name + ".pdf"
        with open(file_path, 'wb') as result:
            pdf_merger.write(result)
        return file_path

Я ожидал, что в результате получится отсортированный и объединенный PDF, чего я уже достиг с другими документами.

1 Ответ

0 голосов
/ 15 января 2019

Похоже, ваш входной PDF не работает. Этот b'F-1.4 'должен читаться как b'% PDF-1.4 '- stovfl

Использование PdfFileReader и PdfFileWriter вместо PdfFilerMerge со следующим кодом решило проблему для меня:

for file in glob.glob(prefix + "*.pdf"):
                pdf_reader = PdfFileReader(file)
                pdf_reader._header = b_("%PDF-1.4")
                for page in range(pdf_reader.getNumPages()):
                    pdf_writer.addPage(pdf_reader.getPage(page))

Простая перезапись заголовка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...