Para o meu site com django, estou procurando uma solução fácil para converter páginas html dinâmicas em pdf.
As páginas incluem HTML e gráficos da API de visualização do Google (que é baseada em javascript, mas incluir esses gráficos é uma obrigação).
Respostas:
Experimente a solução do Reportlab .
Baixe-o e instale-o normalmente com python setup.py install
Você também precisará instalar os seguintes módulos: xhtml2pdf, html5lib, pypdf com easy_install.
Aqui está um exemplo de uso:
Primeiro defina esta função:
Então você pode usá-lo assim:
O modelo:
Espero que ajude.
fonte
cStringIO.StringIO
paraio.StringIO
, devemos definirresult
como emresult = io.BytesIO()
vez deresult = StringIO
.https://github.com/nigma/django-easy-pdf
Modelo:
Visão:
Se você quiser usar django-easy-pdf no Python 3, verifique a solução sugerida aqui .
fonte
Acabei de preparar isso para a CBV. Não é usado na produção, mas gera um PDF para mim. Provavelmente precisa ser trabalhado para o lado do relatório de erros, mas funciona até agora.
Usado como:
fonte
html.encode("ISO-8859-1")
porhtml.decode("utf-8")
content_type = "application/pdf"
Tente wkhtmltopdf com qualquer um dos seguintes wrappers
django-wkhtmltopdf ou python-pdfkit
Isso funcionou muito bem para mim, suporta javascript e css ou qualquer coisa que um navegador de webkit suporte.
Para um tutorial mais detalhado, consulte esta postagem do blog
fonte
Depois de tentar fazer isso funcionar por muitas horas, finalmente encontrei o seguinte: https://github.com/vierno/django-xhtml2pdf
É um fork de https://github.com/chrisglass/django-xhtml2pdf que fornece um mixin para uma visão genérica baseada em classe. Eu usei assim:
Use o nome do modelo que você definiu em sua visualização em letras minúsculas ao preencher os campos do modelo. Por ser um GCBV, você pode apenas chamá-lo de '.as_view' em seu urls.py:
fonte
Você pode usar o editor iReport para definir o layout e publicar o relatório no servidor de relatórios jasper. Depois de publicar, você pode invocar a API restante para obter os resultados.
Aqui está o teste de funcionalidade:
E aqui está um exemplo de implementação de invocação:
fonte
Recebo o código para gerar o PDF a partir do modelo html:
fonte
Se você tiver dados de contexto junto com css e js em seu modelo html. Então você tem uma boa opção para usar pdfjs .
Em seu código você pode usar assim.
Em seu HTML você pode vincular css e js extranal ou interno, ele irá gerar pdf de melhor qualidade.
fonte