Tex hat den Vorteil, dass es plain text files sind (keine Binärdaten).
Installieren der Pakete (Latex-Basis-Paket für „pdflatex“ etc. ~ 300MB):
sudo apt-get update && sudo apt-get install python-pip texlive-latex-base
Installieren der Jinja2-Template-Engine mit Python PIP:
pip install Jinja2
Anlegen einer Tex-Datei zum Einsetzen der Werte (template.tex):
\documentclass{article}
\begin{document}
\begin{tabular}{ll}
<%- for d in data %>
<< d.foo >> & << d.bar >> \\
<%- if not loop.last %> \hline <% endif %>
<%- endfor %>
\end{tabular}
\end{document}
Python Part zum Parsen der Tex-Template Datei (pdfcreate.py):
import os
import subprocess
from jinja2 import Environment, FileSystemLoader
options = { 'block_start_string': '<%',
'block_end_string': '%>',
'variable_start_string': '<<',
'variable_end_string': '>>',
}
jinja_env = Environment(loader=FileSystemLoader(''), **options)
def render(env, template):
tpl = jinja_env.get_template(template)
return tpl.render(env)
def to_file(tex, file='out.tex', path='.'):
with open(os.path.join(path, file), 'w') as f:
f.write(tex)
def run_pdflatex(file='out.tex', path='.'):
return subprocess.call(['pdflatex', file], cwd=path)
if __name__ == '__main__':
env = { 'data': [ {'foo': '1', 'bar': '2'}, {'foo': '3', 'bar': '4'}] }
tex = render(env, 'template.tex')
to_file(tex)
run_pdflatex()
Erzeugt das PDF „out.pdf“ im aktuellen Verzeichnis.