Este projeto foi um teste de geração de PDF, utilizando o xhtml2pdf.
Neste teste, utilizamos um modelo simples de texto de blog e autor. Para edição dos textos no /admin, utilizamos o CKEditor.
Para facilitar o desenvolvimento, optei por separar a renderização em pdf em outra função. Assim, posso reutilizar em outras views ou mesmo em outros apps.
render_pdf(template_path, context)Esta funcionalidade permite a criação de pdfs através de um simples template HTML.
Em sua view, você deve importar a função:
from .utils import render_pdfA função já retorna uma resposta HTTP, então basta que sua view retorne o resultado da função.
return render_pdf.render_pdf('nome_do_template_que_quero_renderizar.html', context)- template_path: caminho para o template que irá gerar o pdf
- context: objeto
contextque é gerado na view
Para facilitar a criação de pdfs, existe um template base, com configuração de página, cabeçalho, rodapé e configuração de fontes.
Então, o template que você quiser renderizar deve extendê-lo e carregar os estáticos.
{% extends 'pdf_base.html' %}
{% load static %}Além disso, o pdf_base.html permite estilização com a utilização do {% block styles %}.
O conteúdo de seu pdf deve ir dentro do {% block content %}
Ao menos na versão do xhtml2pdf utilizada para este teste (0.2.4), a estilização utilizando um arquivo .css externo não tem funcionado. Daí a utilização do {% block styles %}. Além disso, a documentação já nos informa das limitações dos estilos que podemos utilizar. Algumas coisas podem dar mais trabalho, uma vez que teremos que realizar marcações à moda antiga: O Css grid ou flexbox não vão funcionar, teremos que organizar nossos itens através de uma table.
