Generar un PDF a partir de un HTML en Django
Vamos a instalar el paquete de weasyprint.
El cual, en el caso de Windows debes de instalar el siguiente programa:
https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases
Y en MacOS:
$ brew install python pango libffi
En la web oficial:
https://doc.courtbouillon.org/weasyprint/stable/
Tienes el detalle de los programas que debes de instalar para poder emplear este paquete desde Python.
Una vez instaladas las dependencias, ya puedes instalar el paquete como una dependencia más:
$ pip install weasyprint
Su uso es muy sencillo, basta con usar la función de HTML(), indicando la URL a la cual quieres convertir en HTML y donde lo quieres escribir mediante la función de write_pdf(), en este ejemplo, la URL de Google es la cual vamos a convertir a PDF:
pdfs\views.py
from weasyprint import HTML
def generate_pdf(request):
filename="documents/archivo.pdf"
HTML("https://www.google.com.ve/").write_pdf(filename)
return render(request, 'csv.html')
Y tendremos:
Este paquete permite usar otras opciones como por ejemplo indicar el tamaño de la página:
from weasyprint import HTML, CSS
***
HTML(string='''
<h1>The title</h1>
<p>Content goes here
''').write_pdf(filename)
CSS(string='@page { size: A3; margin: 1cm }')
O definir CSS:
HTML('http://weasyprint.org/').write_pdf('/tmp/weasyprint-website.pdf',
stylesheets=[CSS(string='body { font-family: serif !important }')])
Todo esto y más lo puedes ver en la documentación oficial; usar esta opción es particularmente útil si el documento PDF que quieres generar es sencillo y puede ser representado mediante un documento HTML; pero, muchas veces esto no es así y necesitas una solución pixel a pixel como veremos a continuación.
- Andrés Cruz
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter