Berichtsdokument erstellen, Druck und PDF

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Nobuddy
User
Beiträge: 994
Registriert: Montag 30. Januar 2012, 16:38

Hallo zusammen,

ich habe zu diesem Thema hier im Forum gesucht und habe auch ein paar Threads dazu gefunden.
Allerdings bin ich dadurch noch keinen Schritt weitergekommen, daher hier mein Thread.

Ich möchte Berichte, für verschiedene Bereiche erstellen, wie z.B. das erstellen einer Rechnung, die ich ausdrucken und auch als PDF-Datei abspeichern kann. Dieser Bericht soll immer das gleiche Layout haben und mit den wechselnden Daten ausgegeben werden.
Ich arbeite mit keiner Datenbank, sondern meine Daten sind in Spalten getrennten Textdateien enthalten.

pyuno wäre eine Möglichkeit, welche aber doch etwas komlexer in der Anwendung ist, wie ich gelesen habe.
Mit reportman soll man solche Vorlagen erstellen können, was aber kein Python-Programm ist.
ReportLab ein Python-Modul, wäre eine Möglichkeit, leider ist dieses Modul für Python3 nicht verfügbar, was schade ist.
Hier http://www.python-forum.de/viewtopic.ph ... ng+drucken, habe ich etwas zu pdflatex und Jinja2 gefunden, welches mit dem von crs bereitgestelltem Code auch soweit funktioniert.

Code: Alles auswählen

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()

Code: Alles auswählen

\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}
Leider ist mir nicht klar wie ich dort mein gewünschtes Layout einbauen kann?

Was würdet Ihr mir empfehlen?
Bitte aber nicht "lass es bleiben ...".

Würde mich auf Eure Unterstützung freuen!

Grüße Nobuddy
python21
User
Beiträge: 18
Registriert: Dienstag 21. September 2010, 14:36

Ich arbeite immer mit MS Word über win32com. Starte im python Prog. dann mit .Application.run("Makroname") dann das Makro, welche dann die Quelldatei (deine Txt oder xls) sucht und ausgibt. Ich gehe über .xls Datein, weil ich es gewöhnt bin, aber das habe ich auch über py und ein Marko gelöst.
In Word kannst du relativ einfach deine Vorlage (logo etc.?) einbinden.
Grüße
Grüße von python 21
(Python 3)
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Nobuddy hat geschrieben:Leider ist mir nicht klar wie ich dort mein gewünschtes Layout einbauen kann?
Dafür musst Du Dich mit LaTeX auseinandersetzen. Z.B. könntest Du statt der Dokumentklasse 'article' die entsprechenden KOMA-Script Klassen verwenden und anpassen. Damit lassen sich dann auch Briefe, Rechnungen oder ganze Publikationen programmatisch erzeugen - ganz ohne reportlab und pdflib.
Das ist allerdings nicht trivial, da TeX ein sehr komplexes System ist. Vielleicht sind die beiden folgenden Links als Einstieg hilfreich:
http://www.latex-project.org/
http://www.ctan.org/
Nobuddy
User
Beiträge: 994
Registriert: Montag 30. Januar 2012, 16:38

@python21, arbeite bis jetzt mit MS Access, da ist das auch kein Problem.
Möchte aber von Windows auf Linux komplett umsteigen und habe daher schon mit Python3 und Tkinter angefangen.
Da ich nicht mit einer Datenbank arbeite(n möchte), verwende ich eine Datenstruktur die aus TAB-getrennten Textdateien (csv) besteht. Damit komme ich sehr gut klar, letztendlich fehlt eben noch das Erstellen von Dokumenten (PDF), die ich dann auch ausdrucken kann.

@kbr, klar muß mich da wohl mit LaTeX auseinandersetzen.
Mein Problem ist leider die englische Sprache, daher versuche ich deutschsprachiges zu bevorzugen, was leider nicht immer möglich ist. :wink:
Nach meinen bisherigen Recherchen, war mir bewußt 'article' nicht das richtige ist.
Das mit den 'KOMA-Script Klassen', könntest Du mir das vielleicht etwas genauer beschreiben, evtl. ein kurzes Beispiel?

Grüße Nobuddy
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Nobuddy hat geschrieben:Das mit den 'KOMA-Script Klassen', könntest Du mir das vielleicht etwas genauer beschreiben, evtl. ein kurzes Beispiel?
Durch googeln findest Du jede Menge Beispiele. Hier sind zwei deutschsprachige Quellen:
http://www.komascript.de/
http://www.rrzn.uni-hannover.de/fileadm ... rguide.pdf
Nobuddy
User
Beiträge: 994
Registriert: Montag 30. Januar 2012, 16:38

Danke, für Deine schnelle Antwort, werde mir das mal durchlesen. :wink:
Antworten