PdfFileWriter не работает из-за содержимого, включающего китайский символ

#python-3.x

#python #pypdf

Вопрос:

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

Я также попытался включить параметр кодирования с помощью open(«Combined.pdf», «w», encoding=’utf-8-sig’) в качестве OutputStream: но компилятор сказал, что это должен быть двоичный режим ‘wb’. Так что это не работает. Ниже приведен код:

 writer = PdfFileWriter()

input_stream = []
for f2 in f_re:
    inputf_file = str(mypath '\' f2[2])
    input_stream.append(open(inputf_file,'rb'))


for reader in map(PdfFileReader, input_stream):
    for n in range(reader.getNumPages()):
        writer.addPage(reader.getPage(n))
with open("Combined.pdf", "wb") as outputStream:
    writer.write(outputStream)
    writer.save()

for f in input_stream:
    f.close()
  

Ниже приведено сообщение об ошибке:

 Traceback (most recent call last):
  File "WorkspacePythonpy_CombinPDFpy_combinePDF.py", line 89, in <module>
    writer.write(outputStream)
  File "AppDataLocalProgramsPythonPython36libsite-packagesPyPDF2pdf.py", line 501, in write
    obj.writeToStream(stream, key)
  File "AppDataLocalProgramsPythonPython36libsite-packagesPyPDF2generic.py", line 549, in writeToStream
    value.writeToStream(stream, encryption_key)
  File "AppDataLocalProgramsPythonPython36libsite-packagesPyPDF2generic.py", line 472, in writeToStream
    stream.write(b_(self))
  File "AppDataLocalProgramsPythonPython36libsite-packagesPyPDF2utils.py", line 238, in b_
    r = s.encode('latin-1')
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 8-9: ordinal not in range(256)
  

Комментарии:

1. Привет! Этот вопрос был решен путем перехода к PyPDF2utils.py только в сообщении об ошибке line238 указано, что я меняю исходный код r = s.encode(‘latin-1’) на r = s.encode (‘utf-8’), и проблема была решена, я собираюсь закрыть этот вопрос. Надеюсь, это поможет и другим!

Ответ №1:

Обновление PyPDF2 решило эту проблему.

Теперь, 4 года спустя, люди должны использовать pypdf . Он содержит последний код (я поддерживаю PyPDF2 и pypdf)