Frage

Ich bin auf der Suche nach dem besten genauen Werkzeug für PDF in Python, die funktionieren wie Jinja tut für HTML.

Was sind Ihre Vorschläge?

War es hilfreich?

Lösung

Wie beantwortet von jbochi, ReportLab ist die Grundlage für fast alle Python-Projekte, die PDF erzeugen.

Aber für Ihre Bedürfnisse Sie Pisa / xhtml2pdf überprüfen möchten. Sie würden Ihr HTML mit einem Jinja Vorlage erzeugen und dann Pisa verwenden, um die HTML in PDF zu konvertieren. Pisa ist oben auf ReportLab gebaut.

Edit: eine weitere Option, ich hatte vergessen, ist wkhtmltopdf

Andere Tipps

Hier finden Sie aktuelle ReportLab Toolkit .

Sie können Vorlagen verwenden, nur mit der kommerziellen Version, though.

Es gibt jetzt ein neues Kind auf dem Block namens WeasyPrint .

Ich hatte genau die gleiche Forderung wie die OP. Leider war WeasyPrint keine gangbare Lösung, weil ich sehr genaue Positionierung und Barcode-Unterstützung benötigt. Nach ein paar Tagen Arbeit beendete ich eine reportlab XML-Wrapper mit Jinja2 Unterstützung.

Der Code kann auf GitHub zu finden Beispiel einschließlich XML Weicht die folgenden erzeugt PDF .

Was ist Python / Jinja rst / html und html / rst zu pdf entweder rst2pdf oder pandoc .

Beide haben gut für mich gearbeitet, aber. wie plaes, kann ich versuchen, Weasyprint in der Zukunft.

Was genaues Werkzeug für PDF in Python, dass Arbeiten wie Jinja als Jinja selbst?

Sie müssen nur sicherstellen, dass die Jinja Block, variable und Kommentar Identifikationszeichenfolgen nicht in Konflikt steht mit den LaTeX Befehlen. Sobald Sie die Jinja Umgebung zu imitieren die LaTeX Umgebung ändern Sie sind bereit zu gehen!

Hier ist ein Ausschnitt, der von der Box funktioniert:

Python Quelle: ./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()

Latex Vorlage: ./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}

Rufen Sie nun einfach: $> python ./create_pdf.py

resultierende Latex Quelle: ./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}

generierte PDF:

Referenzen:

Wenn Sie vorhandene PDF als Vorlage verwenden mögen, ohne Originaldokument zu verändern, können Sie DHEK Template-Editor verwenden, der Bereich (Grenzen, Namen, Typ) definieren, kann in einer separaten Vorlage-Datei.

Template wird im JSON-Format gespeichert, so dass es in Python analysiert werden kann, Bereiche über PDF zu füllen und das endgültige Dokument (zum Beispiel mit Werten von Web-Formular) zu erzeugen.

Siehe Dokumentation unter https://github.com/applicius/dhek .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top