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
Rechnung erstellen
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
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
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
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
- 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
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.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- 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
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
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
Genau so würde ich das auch machen, zumindest mit PDF als Ziel.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
Gruss,
Jonas
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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).veers hat geschrieben:Genau so würde ich das auch machen, zumindest mit PDF als Ziel.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Oh, cool. Hatte ich übersehen. Danke!Leonidas hat geschrieben: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).veers hat geschrieben:Genau so würde ich das auch machen, zumindest mit PDF als Ziel.
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
Gruß,
Christian
ich hatte mal ungefaehr so ein snippet verwendet (mit pdflatex):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
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}
Vielen Dank! Das ist ja doch sehr einfach!
Ich habe einfach ein Problem mit den Enviroment-Optionen gehabt.
Danke,
Christian
Ich habe einfach ein Problem mit den Enviroment-Optionen gehabt.
Danke,
Christian