Seite 1 von 1

Rechnung erstellen

Verfasst: Sonntag 6. September 2009, 17:43
von sprudel
Hallo,

ich wollte vollautomatisch von meinem Programm eine Rechung erstellen lassne, und diese dann drucken.

Wie mach ich das am besten? Ich mein, wenn ich in Python die HTML-Schnippsel zusammenstückel, das ist einfach nicht die schönste Art- und Weise.

LG Chris

Verfasst: Sonntag 6. September 2009, 18:53
von CM
Hoi,

kannst Du LaTeX? Dann wäre ein LaTeX-Template vielleicht eine Lösung und Du könntest mit Python format strings Daten einfügen und dann (pdf)LaTeX anwerfen. Du kannst dann sowohl PDFs als auch html ausgeben (mit LaTeX2html).

Oder ReportLab. Das ist eine Alternative, wenn Du nur PDFs verschicken möchtest.

HTH
Christian

Verfasst: Sonntag 6. September 2009, 23:30
von problembär
Oder Du steuerst mit Python Deine Textverarbeitung, z.B. MS Word über win32com oder OpenOffice-Writer über pyuno.

Du kannst dann also erst eine Dokumentvorlage mit der Textverarbeitung erstellen, dann darin Sprungmarken/Textmarken setzen und diese dann über Python "anspringen" und dort Text einfügen.

So mach' ich das jedenfalls, wenn ich nicht gerade pdf's erzeuge. Klappt ziemlich gut.

Viele Grüße

Verfasst: Montag 7. September 2009, 12:23
von gerold
Hallo!

Du könntest z.B. mit ReportManager eine Vorlage erstellen, die du dann per Kommandozeilenaufruf mit Variablen füllst.
Du kannst die Informationen auch direkt aus Datenbanken holen.

http://reportman.sourceforge.net/

Das ist zwar kein Python-Programm, kann aber über die Kommandozeile mit Parametern aufgerufen werden.

mfg
Gerold
:-)

Verfasst: Montag 7. September 2009, 12:24
von HWK
Oder mit einer der vielen Template-Engines.
MfG
HWK

Verfasst: Montag 7. September 2009, 19:01
von jens
Ich hab vor einiger Zeit mal PyRM (Python Rechnungs Manager) als Projekt gestartet: http://sourceforge.net/projects/pyrm/

Ist ein django Projekt. Mit dem wollte ich eigentlich meine Rechnungen schreiben. Aber hab schon langer nicht mehr weiter gemacht.

Meine Idee war es erstmal nur eine HTML Seite zum Ausdrucken zu erstellen, doch PDF erzeugen wäre eigentlich netter ;)

Verfasst: Montag 7. September 2009, 22:32
von veers
CM hat geschrieben:Hoi,

kannst Du LaTeX? Dann wäre ein LaTeX-Template vielleicht eine Lösung und Du könntest mit Python format strings Daten einfügen und dann (pdf)LaTeX anwerfen. Du kannst dann sowohl PDFs als auch html ausgeben (mit LaTeX2html).
HTH
Christian
Genau so würde ich das auch machen, zumindest mit PDF als Ziel. :)

Gruss,
Jonas

Verfasst: Dienstag 8. September 2009, 14:10
von Leonidas
veers hat geschrieben:Genau so würde ich das auch machen, zumindest mit PDF als Ziel. :)
Ja. Ich verwende allerdings nicht Template-Strings sondern Jinja2 (nachdem ich die Marker auf runde Statt geschweifte Klammern geändert habe, weil die geschweiften Klammern nicht so toll mit LaTeX zusammenspielen).

Verfasst: Dienstag 8. September 2009, 14:40
von CM
Leonidas hat geschrieben:
veers hat geschrieben:Genau so würde ich das auch machen, zumindest mit PDF als Ziel. :)
Ja. Ich verwende allerdings nicht Template-Strings sondern Jinja2 (nachdem ich die Marker auf runde Statt geschweifte Klammern geändert habe, weil die geschweiften Klammern nicht so toll mit LaTeX zusammenspielen).
Oh, cool. Hatte ich übersehen. Danke!

Verfasst: Mittwoch 9. September 2009, 15:14
von CM
PS: Gibt es zu Jinja2 und LaTeX irgendwo ein Beispielsnippet? Wäre schön, weil die Anleitung für mich - vielleicht auch für andere aus der Nicht-Webentwicklung ? - schwer verdaulich ist, wenngleich schön geschrieben.

Gruß,
Christian

Verfasst: Mittwoch 9. September 2009, 16:52
von crs
CM hat geschrieben:PS: Gibt es zu Jinja2 und LaTeX irgendwo ein Beispielsnippet? Wäre schön, weil die Anleitung für mich - vielleicht auch für andere aus der Nicht-Webentwicklung ? - schwer verdaulich ist, wenngleich schön geschrieben.

Gruß,
Christian
ich hatte mal ungefaehr so ein snippet verwendet (mit pdflatex):

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()
template.tex:

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}

Verfasst: Mittwoch 9. September 2009, 21:03
von CM
Vielen Dank! Das ist ja doch sehr einfach!
Ich habe einfach ein Problem mit den Enviroment-Optionen gehabt.

Danke,
Christian