Проблема с арабским языком в xhtml2pdf django
Я использую xthml2pdf для создания счета-фактуры на арабском языке. Я много искал, чтобы решить эту проблему и следовал всем шагам, но я не знаю, почему это не работает.
Код утилиты:
def render_to_pdf(template_src, context_dict={}):
template = get_template(template_src)
html = template.render(context_dict)
result = BytesIO()
pdf = pisa.pisaDocument(BytesIO(html.encode("UTF-8")), dest=result, encoding='UTF-8')
if not pdf.err:
return HttpResponse(result.getvalue(), content_type='application/pdf')
Просмотр кода:
pdf = render_to_pdf('pdf/invoice.html'), context)
if pdf:
response = HttpResponse(pdf, content_type='application/pdf')
filename = "invoice-%s.pdf" % invoice_number
content = "inline; filename= %s" % filename
response['Content-Disposition'] = content
return response
И, наконец, HTML-код:
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta charset="UTF-8">
<style>
@font-face{font-family:samim; src: url('/assets/fonts/Shabnam-FD.ttf') }
body{
background: #fff;
font-family: samim !important;
direction: rtl !important;
}
</style>
</head>
<body>
<div>
<pdf:language name="arabic"/>
<p>سلام</p>
</div>
</body>
</html>
Но что в конце концов порождает
При использовании xhtml2pdf с Django разрешите разрешать URL-ссылки с помощью настроек Django STATIC_URL
и MEDIA_URL
. Таким образом, в любом окружении ваш код будет работать, потому что Django сделает всю работу.
xhtml2pdf allows users to specify a link_callback
parameter to point to a function that converts relative URLs to absolute system paths. See one example here. [xhtml2pdf-docs]
Используя эту функцию (например, url_converter
), ваш код должен выглядеть так:
def render_to_pdf(template_src, context_dict={}):
#•••Rest of your code•••
result = BytesIO()
result.seek(0)
status = pisa.CreatePDF(html, dest=result, link_callback=url_converter)
if not status.err:
result.seek(0)
return FileResponse(result, content_type='application/pdf')
Не забудьте collectstatic
вставить файлы, чтобы Django правильно определил местоположение ваших файлов.
После того, как я попробовал много разных вещей для генерации PDF. Я пробовал xhtmltopdf, а также wkhtmltopdf и т.д. Позже развертывание было очень сложным для меня, я получал ошибку за ошибкой. Затем я перешел на selenium 4.0, который имеет легкую опцию pdf без всех настроек. Я предлагаю вам перейти на selenium here легко. Но единственная проблема - это облачные ресурсы. Вы можете оценить это для вашей дальнейшей выгоды.