как сохранить строку '\ u2019', '\ u201 c' et c в исходном виде в формате pdf, используя pyfpdf в формате 'latin-1' или в любом другом формате Юникода - PullRequest
0 голосов
/ 08 января 2020

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

html2Pdf.py

from fpdf import FPDF, HTMLMixin   
import unicodedata 
class HTML2PDF(FPDF, HTMLMixin):
    pass


if __name__ == '__main__':
    pdf = HTML2PDF()
    # First page
    pdf.add_page()
    html="<p>'’'="\\u2019",'“'="\\u201c",'”'="\\u201d",'„'="\\u201e" sun's „ray“ “in” </p>"
    pdf.write_html(html)
    pdf.output('html.pdf', 'F')

во время выполнения этого кода для создания PDF я получить эту ошибку

Traceback (most recent call last):
  File "/path_to_code/html2Pdf.py", line 11, in <module>
    pdf.output('html.pdf', "F")
  File "/usr/local/lib/python3.7/site-packages/fpdf/fpdf.py", line 1065, in output
    self.close()
  File "/usr/local/lib/python3.7/site-packages/fpdf/fpdf.py", line 246, in close
    self._enddoc()
  File "/usr/local/lib/python3.7/site-packages/fpdf/fpdf.py", line 1636, in _enddoc
    self._putpages()
  File "/usr/local/lib/python3.7/site-packages/fpdf/fpdf.py", line 1170, in _putpages
    p = self.pages[n].encode("latin1") if PY3K else self.pages[n] 
UnicodeEncodeError: 'latin-1' codec can't encode character '\u2019' in position 3929: ordinal not in range(256)

при попытке ее кодирования.

b = html.encode('ascii', 'backslashreplace')
html = b.decode(encoding="utf-8", errors="strict") 

выводится как

'\ u2019' = "\\ u2019", ' \ u201 c '= "\\ u201 c",' \ u201d '= "\\ u201d",' \ u201e '= "\\ u201e" sun \ u2019s \ u201eray \ u201 c \ u201cin \ u201d

И Pdf получает и работает, но оригинальная строка теряется из-за encode и decode метода

'' '= "\\ u2019 ", '“' = "\\ u201 c", '”' =" \\ u201d ", '„' = "\\ u201e" солнечный луч "in"

как сохранить эту строку в исходном виде

...