hi leute/black jack,
ich würde gern eine tabelle, die ich durch auslesen meiner datenbank gewinne (funktioniert), als .pdf-datei speichern.
soll heissen, ich bekomme eine tabelle ausgegeben, die ich in einem Tk()-fenster angezeigt bekomme. diese Tk-fenster-Tabelle möchte ich
jetzt gern als .pdf-datei abspeichern können.
geht das?
Tabelle (gewonnen aus Datenbank) als .pdf speichern
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Reportlab Doku (http://www.reportlab.com/documentation/), Kapitel 7. Wobei wenn du dich nicht mit ReportLab auskennst, dass Kapitel 7 alleine wohl nicht verständlich ist. Dann musst du mindestens bei Kapitel 5 anfangen.
Wenn die Tabelle einfach ist, wäre auch ein Tool, dass HTML in PDF konvertiert, eine Möglichkeit. Da gibt's diverse, müsstest nur mal sehen, welches noch gepflegt wird.
Gruß, noisefloor
Reportlab Doku (http://www.reportlab.com/documentation/), Kapitel 7. Wobei wenn du dich nicht mit ReportLab auskennst, dass Kapitel 7 alleine wohl nicht verständlich ist. Dann musst du mindestens bei Kapitel 5 anfangen.
Wenn die Tabelle einfach ist, wäre auch ein Tool, dass HTML in PDF konvertiert, eine Möglichkeit. Da gibt's diverse, müsstest nur mal sehen, welches noch gepflegt wird.
Gruß, noisefloor
das ist schon ne super hilfe, aber gibt es nicht für ein Tk()-Fenster eine standardisierte reportlab-Anwendung, sozusagen ne kopie, die einfach
in reportlab übertragen wird??
das ist echt viel arbeit für so eine kleine tabelle, wie ich sie habe
in reportlab übertragen wird??
das ist echt viel arbeit für so eine kleine tabelle, wie ich sie habe
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
kann schon sein, dass sich irgendwann mal irgendwer darüber Gedanken gemacht hat, mir ist aber nichts bekannt.
Von daher musst du in RepportLab das gleiche machen, wie in Tk: über die Daten iterieren und dabei die Tabelle ins PDF schreiben
Brauchst du nur eine nackte Tabelle als PDF oder soll da noch mehr rein?
Gruß, noisefloor
kann schon sein, dass sich irgendwann mal irgendwer darüber Gedanken gemacht hat, mir ist aber nichts bekannt.
Von daher musst du in RepportLab das gleiche machen, wie in Tk: über die Daten iterieren und dabei die Tabelle ins PDF schreiben
Brauchst du nur eine nackte Tabelle als PDF oder soll da noch mehr rein?
Gruß, noisefloor
Vielleicht magst du das ja teilen, falls sich noch jemand dafür interessiert.DMD hat geschrieben:da soll schon mehr rein. hab mir aber schon etwas gebastelt
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
deine Lösung würde mich auch interessieren
Gruß, noisefloor
deine Lösung würde mich auch interessieren
Gruß, noisefloor
kein problem.
ich werds hier reinstellen, wenn ich soweit bin.
dauert aber wohl noch.
hab nur dieses gefunden:
das ist schon im netz.
ich muss das aber noch auf meinen krams umschreiben
ich werds hier reinstellen, wenn ich soweit bin.
dauert aber wohl noch.
hab nur dieses gefunden:
Code: Alles auswählen
from Tkinter import *
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4, landscape
from reportlab.platypus import Image
from tkFileDialog import asksaveasfilename
def CreeerRapport(datum, pompnummer, jobnummer, pomptype, snelheid, gemiddeldeAfwijking, tabelImage):
filename = asksaveasfilename(
filetypes = [("PDF bestand", ".pdf")],
title = "Rapport opslaan",
initialfile = "RapportPomp.pdf")
if filename != "":
## filename = filename.replace("/", "\\") Changing the separators in the path does not fix the problem
file = canvas.Canvas(filename, pagesize=landscape(A4))
# Header
file.setFont("Helvetica", 30, leading=None)
file.drawCentredString(415, 550, "Resultaten van pomp: " + pompnummer)
# Tabel
file.setFont("Helvetica", 12, leading=None)
file.drawString(50, 490, "Datum:")
file.drawString(50, 470, "Pompnummer:")
file.drawString(50, 455, "Jobnummer:")
file.drawString(50, 440, "Type: ")
file.drawString(50, 425, "Snelheid:")
file.drawString(50, 410, "Gemiddelde afwijking:")
X = 170
file.drawString(X, 490, datum)
file.drawString(X, 470, pompnummer)
file.drawString(X, 455, jobnummer)
file.drawString(X, 440, pomptype)
file.drawString(X, 425, snelheid + " ml/h")
file.drawString(X, 400, gemiddeldeAfwijking + " %")
file.showPage()
file.save()
root = Tk()
button = Button(root, text="Press!", command=lambda: CreeerRapport("06 February 2002", "62778", "08330", "DPS", "5", "1.3", None))
button.pack()
root.mainloop()
ich muss das aber noch auf meinen krams umschreiben
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
das geht und funktioniert, ist aber ziemlich "low level", weil du von Hand das Layout / die Positionierung jedes Elements festlegen musst. Mal angesehen davon, dass in dem Beispiel keine Tabelle generiert wird
Für Dokumente mit mehr Inhalt möchtest du Platypus, weil sich dann ReportLab in weiten Teilen um's Layout kümmert.
Wenn dir doch eine Liste von Elementen als Darstellung reicht, dann geht das Mittels Platypus wie z.B. hier im Blog. Mit Platypus gehen natürlich auch Tabellen, Links gab's schon weiter oben.
Gruß, noisefloor
das geht und funktioniert, ist aber ziemlich "low level", weil du von Hand das Layout / die Positionierung jedes Elements festlegen musst. Mal angesehen davon, dass in dem Beispiel keine Tabelle generiert wird
Für Dokumente mit mehr Inhalt möchtest du Platypus, weil sich dann ReportLab in weiten Teilen um's Layout kümmert.
Wenn dir doch eine Liste von Elementen als Darstellung reicht, dann geht das Mittels Platypus wie z.B. hier im Blog. Mit Platypus gehen natürlich auch Tabellen, Links gab's schon weiter oben.
Gruß, noisefloor
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Und das selber zu programmieren ist ja auch echt kein Hexenwerk - DIY! Die notwendigen Links sind dir alle schon gegeben worden.
Gruß, noisefloor
Gegenfrage: Warum soll es denn geben? Nur weil du das jetzt im Moment mal dringend brauchst? Tkinter und ReportLab haben ja nichts miteinander zu tun, noch nicht mal ansatzweise. Abgesehen davon ist Tkinter ja nur eins von drei bis vier gängigen Frameworks zum Bauen von GUIs (mit Hilfe von Python).DMD hat geschrieben:ich finds schon ziemlich schlecht, dass es keine standardmöglichkeit gibt,
Dann....?wenn ich das vorher gewusst hätte ....
Und das selber zu programmieren ist ja auch echt kein Hexenwerk - DIY! Die notwendigen Links sind dir alle schon gegeben worden.
Gruß, noisefloor
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
habe heute mal über die Basic von Tabellen in ReportLab gebloggt: http://noisefloor-net.blogspot.de/2015/ ... rtlab.html.
Vielleicht hilft's ja
Gruß, noiselfoor
habe heute mal über die Basic von Tabellen in ReportLab gebloggt: http://noisefloor-net.blogspot.de/2015/ ... rtlab.html.
Vielleicht hilft's ja
Gruß, noiselfoor
...wenn man sich eine tabelle erstellt, die irgendwelche werte enthält,
naja, was will ich dann wohl damit machen....einfach nur angucken???
is doch klar das man die weiterverarbeiten will --> SPEICHERN, DRUCKEN was auch immer.
ich bin doch nicht der einzige auf der welt, dem das so geht
naja, was will ich dann wohl damit machen....einfach nur angucken???
is doch klar das man die weiterverarbeiten will --> SPEICHERN, DRUCKEN was auch immer.
ich bin doch nicht der einzige auf der welt, dem das so geht
Als Software-Entwickler hat man eigentlichen keinen Grund sich darüber zu ärgern, dass so vieles erst noch programmiert werden muss. Denn wenn es nicht so wäre, wofür würde man uns dann bezahlen?
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
also Tkinter kann nicht viel mehr, als die GUI darzustellen.
Wenn du mehr Funktionalität suchst, dann solltest du mal auf Qt oder GTK+ schauen. Qt kann z.B. auch ootb PDFs über die QPrinter Klasse erstellen.
Unter Tk musst du das wohl selber schreiben. Einfach einen Button einfügen, an dessen "Button pressed" Event eine Callback-Funktion binden, die die zu druckenden Daten ReportLab übergibt, welches dann das PDF baut.
Gruß, noisefloor
also Tkinter kann nicht viel mehr, als die GUI darzustellen.
Wenn du mehr Funktionalität suchst, dann solltest du mal auf Qt oder GTK+ schauen. Qt kann z.B. auch ootb PDFs über die QPrinter Klasse erstellen.
Unter Tk musst du das wohl selber schreiben. Einfach einen Button einfügen, an dessen "Button pressed" Event eine Callback-Funktion binden, die die zu druckenden Daten ReportLab übergibt, welches dann das PDF baut.
+1Als Software-Entwickler hat man eigentlichen keinen Grund sich darüber zu ärgern, dass so vieles erst noch programmiert werden muss. Denn wenn es nicht so wäre, wofür würde man uns dann bezahlen?
Gruß, noisefloor
ich habe hier etwas gefunden und etwas abgeändert:
der code speichert zwar als .pdf, man kann sie aber nicht mit adobe acrobat öffnen.
aber wieso???
Code: Alles auswählen
from reportlab.platypus import Image
from tkFileDialog import asksaveasfilename
import tkFileDialog
from Tkinter import *
def file_save():
f = tkFileDialog.asksaveasfile(mode='w', defaultextension=".pdf") # vorher stand da ".txt", was einwandfrei funktionierte
if f is None: # asksaveasfile gibt `None` zurueck, wenn dialog mit 'abbrechen' geschlossen wird
return
text2save = str(text.get(1.0, END))
f.write(text2save)
f.close()
root = Tk()
root.title('--> NUMMERO UNO <--')
root.geometry("500x500")
b_r1 = Button(root, text = 'Speichern', command=file_save)
b_r1.place(relx=.84, rely=.8, anchor="c")
root.mainloop()
aber wieso???
@DMD: Na weil Du da einfach eine Textdatei schreibst und kein PDF. Durch die Dateiendung ändert sich ja nicht auf magische Weise der Dateiinhalt.