Rechnung erstellen

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
sprudel
User
Beiträge: 250
Registriert: Donnerstag 8. März 2007, 17:12

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Oder mit einer der vielen Template-Engines.
MfG
HWK
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

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
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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!
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
crs
User
Beiträge: 42
Registriert: Dienstag 14. Juli 2009, 13:24

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}
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Vielen Dank! Das ist ja doch sehr einfach!
Ich habe einfach ein Problem mit den Enviroment-Optionen gehabt.

Danke,
Christian
Antworten