Python: PDF mit LaTex erstellen – Vorbereitungen

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.

Schreibe einen Kommentar