Есть ли способ генерировать pdf, содержащий символы не ascii с pisa из шаблона django?
Я пытаюсь создать 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, а затем для пользователя unicode (html,"UTF-8"), но он бросает TypeError.
также я подумал, что, возможно, это потому, что шрифты по умолчанию как-то не поддерживают utf-8 поэтому, согласно документации pisa, я попытался установить fontface в тело шаблона в разделе Стиль.
это все еще не дало никаких результатов.
есть ли у кого-нибудь идеи, как решить эту проблему?
5 ответов
это работает для меня:
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')