Pergunta

Eu estou procurando a melhor ferramenta precisa para PDF em Python e que funciona como Jinja faz para HTML.

Quais são suas sugestões?

Foi útil?

Solução

Conforme respondido por JBOCHI, o ReportLab é a base para quase todos os projetos do Python que geram PDF.

Mas para suas necessidades, você pode querer conferir PISA / XHTML2PDF. Você geraria seu HTML com um modelo Jinja e, em seguida, usaria o PISA para converter o HTML em PDF. O PISA é construído sobre o relatório.

Editar: Outra opção que eu esqueci é wkhtmltopdf

Outras dicas

Dê uma olhada em RelatórioLab Toolkit.

Você pode usar modelos apenas com a versão comercial.

Agora há um novo garoto no quarteirão chamado WEASYPRINT.

Eu tinha exatamente o mesmo requisito que o OP. Infelizmente, o WeasyPrint não era uma solução viável, porque eu precisava de posicionamento exato e suporte de código de barras. Depois de alguns dias de trabalho, terminei um wrapper do relatório XML com suporte ao Jinja2.

O código pode ser encontrado no github, incluindo um exemplo Xml que gera o seguinte Pdf.

E quanto a Python/Jinja para RST/HTML e HTML/RST para PDF usando qualquer um rst2pdf ou pandoc.

Ambos funcionaram bem para mim, mas. Como Plaes, posso tentar WEASYPRINT no futuro.

O que mais preciso ferramenta para PDF em Python e que funciona como Jinja de Jinja, em si?

Você apenas tem de se certificar de que o Jinja bloco variável, e comentário de cadeias de caracteres de identificação não entrem em conflito com a LaTeX comandos.Uma vez que você alterar o Jinja ambiente para imitar o LaTeX meio ambiente você está pronto para ir!

Aqui está um trecho de código que funciona fora da caixa:

Python Fonte: ./create_pdf.py

import os, jinja2
from jinja2 import Template

latex_jinja_env = jinja2.Environment(
    block_start_string    = '\BLOCK{',
    block_end_string      = '}',
    variable_start_string = '\VAR{',
    variable_end_string   = '}',
    comment_start_string  = '\#{',
    comment_end_string    = '}',
    line_statement_prefix = '%%',
    line_comment_prefix   = '%#',
    trim_blocks           = True,
    autoescape            = False,
    loader                = jinja2.FileSystemLoader(os.path.abspath('./latex/'))
)
template = latex_jinja_env.get_template('latex_template.tex')

# populate a dictionary with the variables of interest
template_vars  = {}
template_vars['section_1'] = 'The Section 1 Title'
template_vars['section_2'] = 'The Section 2 Title'

# create a file and save the latex
output_file = open('./generated_latex.tex', 'w')
# pass the dictionary with variable names to the renderer
output_file.write( template.render( template_vars ) )
output_file.close()

Látex Modelo: ./latex/latex_template.tex

\documentclass{article}
\begin{document}
\section{Example}
An example document using \LaTeX, Python, and Jinja.

% This is a regular LaTeX comment
\section{\VAR{section_1}}
\begin{itemize}
\BLOCK{ for x in range(0,3) }
  \item Counting: \VAR{x}
\BLOCK{ endfor }
\end{itemize}

\#{This is a long-form Jinja comment}
\BLOCK{ if subsection_1_1 }
\subsection{ The subsection }
This appears only if subsection_1_1 variable is passed to renderer.
\BLOCK{ endif }

%# This is a short-form Jinja comment
\section{\VAR{section_2}}
\begin{itemize}
%% for x in range(0,3)
  \item Counting: \VAR{x}
%% endfor
\end{itemize}

\end{document}

Agora basta chamar: $> python ./create_pdf.py

Resultante De Látex Fonte: ./generated_latex.tex

\documentclass{article}
\begin{document}
\section{Example}
An example document using \LaTeX, Python, and Jinja.

% This is a regular LaTeX comment
\section{The Section 1 Title}
\begin{itemize}
  \item Counting: 0
  \item Counting: 1
  \item Counting: 2
\end{itemize}

\section{The Section 2 Title}
\begin{itemize}
  \item Counting: 0
  \item Counting: 1
  \item Counting: 2
\end{itemize}

\end{document}

Pdf Gerado:

enter image description here

Referências:

Se você deseja usar o PDF existente como modelo, sem alterar o documento original, você pode usar o DHEK Model Editor, que permite definir área (limites, nome, tipo) em um arquivo de modelo separado.

O modelo é salvo no formato JSON para que possa ser analisado no Python, para preencher áreas sobre PDF e gerar o documento final (por exemplo, com valores do formulário da Web).

Veja a documentação em https://github.com/applicius/dhek .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top