python - tag - ¿Hay alguna manera de generar un pdf que contenga símbolos no-ascii con pisa de la plantilla django?
include template django (5)
Estoy tratando de generar un pdf desde la plantilla usando este fragmento:
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'')
Todos los símbolos no latinos no se muestran correctamente, la plantilla y la vista se guardan utilizando la codificación utf-8.
He intentado guardar la vista como ANSI y luego al usuario unicode (html, "UTF-8"), pero arroja TypeError.
También pensé que tal vez es porque las fuentes predeterminadas de alguna manera no son compatibles con utf-8, por lo que, de acuerdo con la documentación de pisa, traté de configurar la fuente en el cuerpo de la plantilla en la sección de estilo.
Eso todavía no dio resultados.
¿Alguien tiene alguna idea de cómo resolver este problema?
Esto funciona para mí:
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result, encoding=''UTF-8'')
Me enfrenté al mismo problema con los caracteres cirílicos.
La solución contenía dos pasos: 1. Señale el archivo de fuente en su archivo HTML
<style type="text/css">
@font-face {
font-family: Arial; src: url("files/arial.ttf");
}
body {
font-family: Arial;
}
</style>
2. Dar la ruta raíz "pisa" (para que encuentre el archivo de fuente por una ruta relativa) en mi caso fue algo como esto
pdf = pisa.pisaDocument(html, result, path=PATH_TO_DJANGO_PROJECT)
porque las fuentes se colocaron en PATH_TO_DJANGO_PROJECT / files / arial.ttf
Necesitas modificar tu plantilla django. Agregue una nueva fuente en la hoja de estilo que se vinculará a un archivo de fuente con caracteres utilizados en su documento. Y ese archivo de fuentes debe ser accesible desde su servidor (bajo Ubuntu puede encontrar archivos con fuentes en / usr / share / fonts / truetype / directory). Por ejemplo:
@font-face {
font-family: DejaMono;
src: url(font/DejaVuSansMono.ttf);
}
Entonces si tienes el siguiente código HTML:
<div>Some non-latin characters</div>
Puedes mostrar ese texto en fuente DejaMono con esta regla CSS:
div { font-family: DejaMono; }
Esto me funciona cuando genero documentos PDF con caracteres cirílicos.
Si está llamando a createPDF en lugar del método pisaDocument, puede usar
pisa.CreatePDF(html.encode(''UTF-8''), response, link_callback=fetch_resources, encoding=''UTF-8'')
Tratar de reemplazar
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result)
con
pdf = pisa.pisaDocument(StringIO.StringIO(html), result, encoding=''UTF-8'')
¿O verifica esta respuesta a html to pdf para un sitio de Django?