Xhtml2pdf шрифты для латинских символов для рендеринга шаблона pdf
Я делаю динамический рендеринг шаблона pdf с помощью библиотеки xhtml2pdf в Django. Проблема заключается в смягчении знаков, таких как ā, š, ķ и т.д. Я пытался использовать все предложенные шрифты из документации. Я могу получить шрифты, но не эти смягченные символы. это выглядит как preview of pdf
from django.template.loader import get_template
from xhtml2pdf import pisa
from io import BytesIO
def quote_preview_pdf(request, pk, pk2):
# subscription = stripeInfo(request)
user = request.user
user_company = UserCompany.objects.get(company_user=user)
client_company = user.clientcompanies_set.get(id=pk)
quote_nr = user_company.quotenumber_set.get(id=pk2)
quote_nr = user_company.quotenumber_set.get(id=pk2)
get_quoted_products = CompaniesQuote.objects.filter(quote_nr = quote_nr)
get_only_quoted_products = CompaniesQuote.objects.filter(quote_nr =
quote_nr).values_list('item__id', flat=True)
calc_totals = get_only_quoted_products.annotate(
calc_total_profit=(F('item__selling_price') * (1 - (F('discount') / 100)) * F('quantity'))
- (F('item__buying_price') * F('quantity')),
calc_total_sales_price = (F('item__selling_price') * F('quantity')),
calc_total_sales_price_disc = (F('item__selling_price') * (1 - (F('discount') / 100)) *
F('quantity')),
calc_total_sales_price_vat = (F('item__selling_price') * ( 1 + (F('item__vat') / 100)) *
F('quantity')),
calc_total_sales_price_vat_disc = (F('item__selling_price')* (1 - (F('discount') / 100)) *
( 1 + (F('item__vat') / 100)) * F('quantity')),
calc_total_vat = (F('item__selling_price')* (1 - (F('discount') / 100)) * ( 1 +
(F('item__vat') / 100)) * F('quantity')) - (F('item__selling_price') * (1 -
(F('discount') / 100)) * F('quantity'))
).aggregate(
thesum=Sum('calc_total_profit'),
sumsalles=Sum('calc_total_sales_price'),
sumsallesdiscount=Sum('calc_total_sales_price_disc'),
sumsallesvat=Sum('calc_total_sales_price_vat'),
sumsallesvatdiscount=Sum('calc_total_sales_price_vat_disc'),
sumvattotal = Sum('calc_total_vat'),
)
template_path = 'quote_preview_pdf.html'
context = {
'user_company': user_company,
'client_company': client_company,
'quote_nr':quote_nr,
'get_quoted_products':get_quoted_products,
'calc_totals':calc_totals,
}
# Create a Django response object, and specify content_type as pdf
response = HttpResponse(content_type='application/pdf')
response['Content-Disposition'] = 'filename="quote.pdf"'
# response['Content-Transfer-Encoding'] = 'binary'
# response['Content-Disposition'] = 'attachment; filename="quote.pdf"'
# find the template and render it.
template = get_template(template_path)
html = template.render(context)
pisa.pisaDocument(
src=BytesIO(html.encode('UTF-8')),
dest=response,
encoding='UTF-8'
)
# create a pdf
pisa_status = pisa.CreatePDF(
html, dest=response)
# if error then show some funy view
if pisa_status.err:
return HttpResponse('We had some errors <pre>' + html + '</pre>')
return response
Для меня это выглядит так, как будто он не кодирует UTF-8, потому что он меняет шрифт. Я пробовал играть с @font-face, но безуспешно.
Вот мой CSS для pdf
body {
font-family: 'Times New Roman';
}
@page{
size: letter portrait;
margin: 2cm;
}
Похоже, что эта проблема возникает уже давно, но не удалось найти ее решение.