Ответ 1
Это работает для меня:
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result, encoding='UTF-8')
Я пытаюсь создать pdf файл из шаблона с помощью этого фрагмента:
def write_pdf(template_src, context_dict):
template = get_template(template_src)
context = Context(context_dict)
html = template.render(context)
result = StringIO.StringIO()
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result)
if not pdf.err:
return http.HttpResponse(result.getvalue(), mimetype='application/pdf')
except Exception('PDF error')
Все нелатинские символы отображаются некорректно, шаблон и представление сохраняются с использованием кодировки utf-8.
Я попытался сохранить представление как ANSI, а затем в юникод пользователя (html, "UTF-8" ), но он выдает TypeError.
Также я подумал, что, может быть, потому, что шрифты по умолчанию каким-то образом не поддерживают utf-8 поэтому согласно документации pisa я попытался установить шрифт в шаблоне в разделе стиля.
Это все еще не дало результатов.
Есть ли у кого-нибудь идеи, как решить эту проблему?
Это работает для меня:
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result, encoding='UTF-8')
Попробуйте заменить
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result)
с
pdf = pisa.pisaDocument(StringIO.StringIO(html), result, encoding='UTF-8')
Или проверить этот ответ на html в pdf для сайта Django?
Вам нужно изменить свой шаблон django. Добавьте новый шрифт в таблицу стилей, которая будет ссылаться на файл шрифта с символами, используемыми в вашем документе. И этот файл шрифта должен быть доступен с вашего сервера (в Ubuntu вы можете найти файлы со шрифтами в каталоге /usr/share/fonts/truetype/ ). Например:
@font-face {
font-family: DejaMono;
src: url(font/DejaVuSansMono.ttf);
}
Затем, если у вас есть следующий код HTML:
<div>Some non-latin characters</div>
вы можете отобразить этот текст в шрифте DejaMono с помощью этого правила CSS:
div { font-family: DejaMono; }
Это работает для меня, когда я создаю документы PDF с кириллическими символами.
Я столкнулся с такой же проблемой с кириллическими символами.
Решение состоит из двух шагов: 1. Укажите файл шрифта в вашем файле HTML
<style type="text/css">
@font-face {
font-family: Arial; src: url("files/arial.ttf");
}
body {
font-family: Arial;
}
</style>
2. Дайте корневой путь "pisa" (чтобы найти файл шрифта по относительному пути) в моем случае это было что-то вроде этого
pdf = pisa.pisaDocument(html, result, path=PATH_TO_DJANGO_PROJECT)
потому что шрифты были помещены в PATH_TO_DJANGO_PROJECT/files/arial.ttf
Если вы вызываете createPDF вместо метода pisaDocument, вы можете использовать
pisa.CreatePDF(html.encode('UTF-8'), response, link_callback=fetch_resources, encoding='UTF-8')