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
ветка.