pyPdf: незаконный суррогат UTF-16

У меня есть файл PDF, который ломает pyPdf: http://tovotu.de/tests/test.pdf

Это пример сценария:

from pyPdf import PdfFileWriter, PdfFileReader

outputPdf = PdfFileWriter()

inpdf = open("test.pdf","rb")
inputPdf = PdfFileReader(inpdf)
[outputPdf.addPage(x) for x in inputPdf.pages]

with open("output.pdf","wb") as outpdf:
    outputPdf.write(outpdf)

Ошибка вывода здесь: http://pastebin.com/0m38zhjQ

Ошибка та же при использовании PyPDF2 из GitHub. pdftk может обрабатывать этот PDF-файл так же, как любой другой PDF-файл. Обратите внимание, что запись не удалась, но чтение работает нормально!

Можете ли вы указать мне ту часть PDF-файла, которая вызывает эту ошибку? Обходной путь был бы еще лучше:)

1 ответ

Решение

Похоже, ошибка в PyPDF2. В этом разделе:

if string.startswith(codecs.BOM_UTF16_BE):
    retval = TextStringObject(string.decode("utf-16"))
    retval.autodetect_utf16 = True

предполагается, что любая строка, начинающаяся с (0xFE, 0xFF), может быть декодирована как UTF-16. Ваш файл содержит строку байтов, которая начинается таким образом, но затем содержит недопустимый UTF-16.

Самое простое решение - это закомментировать if и безоговорочно использовать # This is probably a big performance hit here ветка.

Другие вопросы по тегам