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.