Texteditor und Druckausgabe

  • Hallo!

    Ich hab zwar keine konkrete Anwendung, aber eine Frage zu Dokumenterstellung und -ausdruck.

    Welche Moglichkeiten hätte man in Python, um ein Textdokument auf dem Bildschirm dynamisch zu erstellen (also z. B. eine Rechnung, mit Adresse, Produkten, Preisen, Summe, Umsatzsteuer usw... natürlich auch mit Formatierungen, wenigstens grundlegend - Schriftgröße, Fettschrift, Tabulatoren oder Tabellen für Spaltensatz und das alles in den passenden Maßen für ein DIN-A4-Dokument), diese dann vom Anwender noch individuell verändern zu lassen (also quasi ein Texteditor - zu bedienen wie Word oder evtl. auch schlichter, so wie Notepad) und das fertige Dokument dann auszudrucken und ggf. auch komplett zu speichern.

    Ich nutze derzeit Kivy für die/das GUI - damit sollte es dann natürlich funktionieren...

    Ich hab ein wenig gesucht und bin auf Reportlab gestoßen, aber das ist nicht so das, was ich mir vorstelle, weil man da nur ein PDF erstellt und keine Änderungen durch den Anwender machen kann.

    Kivy bietet eine "markup"-Funktionalität - das wäre vielleicht schon ein Ansatz. Aber einen kompletten Editor hab ich nicht gefunden.

    Gibt es eine Art Texteditor-Library - einen Texteditor, den man in die eigene Anwendung einbetten kann? Und wie kann man dann damit den Ausdruck auf einen beliebigen Drucker realisieren (bei mir unter Windows - generell aber auch in Mac oder Linux)?


    Hat jemand einen Tipp, womit man sowas umsetzen kann?

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    3 Mal editiert, zuletzt von Gnom (12. Mai 2021 um 09:14)

  • Wenn Du die Dateien nicht mit Microsoft Word austauschen musst, würde ich eher zum ODF Standard raten. Also z.B. zu odfpy 1.4.1. Unabhängig davon fällt mir für das, was Du willst, natürlich auch LaTeX ein. :)

    Für die Druckstufe würde ich immer über PDF als Zwischenschritt gehen. Wenn das PDF ordentlich generiert wird, kannst Du recht sicher sein, dass es aus so ziemlich jedem Drucker nahezu identisch aussehen wird.

  • Mir ist noch nicht ganz klar was du machen möchtest.

    Willst du dir selbst eine Art Microsoft Office Word/Libreoffice zusammenbasteln?

    Laut der Doku kannst du die Schriftart, Schriftgröße usw. ändern.

  • Wenn Du die Dateien nicht mit Microsoft Word austauschen musst, würde ich eher zum ODF Standard raten. Also z.B. zu odfpy 1.4.1. Unabhängig davon fällt mir für das, was Du willst, natürlich auch LaTeX ein. :)

    Für die Druckstufe würde ich immer über PDF als Zwischenschritt gehen. Wenn das PDF ordentlich generiert wird, kannst Du recht sicher sein, dass es aus so ziemlich jedem Drucker nahezu identisch aussehen wird.

    ODF ist im Zweifel besser als DOCX - aber auch hier ist editieren dann erst mal nur in LibreOffice selbst möglich. Ein Editor-Fenster direkt in Python wäre natürlich netter. Das Format sollte auch möglichst schlank sein - DocBook klingt nett - aber LibreWriter schreibt DBXML nur ohne Formatierungen...

    PDF ist dann leider gar nicht editierbar. Da man heute die fertigen Dokumente ohnehin in der Regel ablegt, versteht es sich fast von selbst, dass man PDFs schriebt und diese ausdruckt (wenn nicht gar gleich per Mail verschickt).

    LaTeX ist ziemlich mächtig. Lässt sich bestimmt auch einsetzen. Auch hier aber sicher nur mit externen Editoren - und LaTeX ist ja eigentlich weniger für wysiwyg ausgelegt.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Mir ist noch nicht ganz klar was du machen möchtest.

    Willst du dir selbst eine Art Microsoft Office Word/Libreoffice zusammenbasteln?

    Laut der Doku kannst du die Schriftart, Schriftgröße usw. ändern.

    Nun, hatte ich ja oben geschrieben. Wenn das Programm ein Dokument erstellt, z. B. eine Rechnung (aus Daten der Auftragsdatenbank), dann gibt es doch oft noch was zu ändern oder zu ergänzen - dafür wäre es praktisch, das Dokument vom Programm erstellen zu lassen und dann noch editieren zu können. Immerhin, mit den genannten Tools könnte man Word- oder Libre-Dokumente erstellen und in den jeweiligen Editoren bearbeiten. Direkt in einem Programmfenster in Pythpon wäre das aber noch eleganter.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Beitrag von SteepBrook64153 (12. Mai 2021 um 19:40)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • dafür wäre es praktisch, das Dokument vom Programm erstellen zu lassen und dann noch editieren zu können

    Das klingt danach, als wolltest Du Dir ein eigenes Textverarbeitungsprogramm programmieren. Warum nicht? Aber das wird recht aufwendig.

    Was ist denn der genaue Anwendungsfall? Soll das Ding auf einem regulären Desktop-PC laufen? Hast Du begrenzte Ressourcen (CPU, RAM etc.)? Woraus generierst Du die Rechnung? Aus einer Datenbank? Nutzer-Eingaben? Anderen Files?

    Wenn Du eine WYSIWYG Oberfläche haben möchtest, wäre es jedenfalls einfacher, auf ein bestehendes Programm wie z.B. LibreOffice zurückzugreifen und dem ein Dokument zu liefern. Du könntest z.B. durch Dein Programm eine .odt Datei generieren, speichern und dann automatisch mit LibreOffice öffnen lassen. Dann kannst Du von dort aus auch ein PDF generieren oder direkt drucken. Oder Du schreibst in eine .ott Datei, die Du dann mit LibreOffice öffnest. So kannst Du durch einfaches Schließen des Programms jedwede Änderungen direkt löschen.

  • Was ist denn an der Anfrage so schwer zu verstehen? Ich hätte gerne einen Rich-Text-Editor im Python Programmfenster, den das Programm mit Inhalten befüllen kann und anschließend kann der User das Dokument noch verändern und dann drucken oder speichern.

    Tkinter bringt mir nichts, weil ich wie gesagt Kivy nutze.

    PIL scheint mir auch eher ungeeignet.

    Es gibt diverse Libs, um Textdokumente zu erstellen (wie oben schon gesagt, docx, odt, aber auch rtf, ps, pdf, ...), aber offenbar keine Funktionalität, um etwas umfangreichere Textdokumente (Formate, Tabellen, Logo, ...) in Python direkt im Fenster zu editieren - so wie man es auch in einem einfachen Rich-Text-Editor machen würde. In der Praxis muss ja bloß mal ein Straßenname zu lang sein oder eine Zeile für einen Empfängernamen fehlen und schon hätte man Bedarf, manuell einzugreifen...

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Das klingt danach, als wolltest Du Dir ein eigenes Textverarbeitungsprogramm programmieren. Warum nicht? Aber das wird recht aufwendig.

    Was ist denn der genaue Anwendungsfall? Soll das Ding auf einem regulären Desktop-PC laufen? Hast Du begrenzte Ressourcen (CPU, RAM etc.)? Woraus generierst Du die Rechnung? Aus einer Datenbank? Nutzer-Eingaben? Anderen Files?

    Wenn Du eine WYSIWYG Oberfläche haben möchtest, wäre es jedenfalls einfacher, auf ein bestehendes Programm wie z.B. LibreOffice zurückzugreifen und dem ein Dokument zu liefern. Du könntest z.B. durch Dein Programm eine .odt Datei generieren, speichern und dann automatisch mit LibreOffice öffnen lassen. Dann kannst Du von dort aus auch ein PDF generieren oder direkt drucken. Oder Du schreibst in eine .ott Datei, die Du dann mit LibreOffice öffnest. So kannst Du durch einfaches Schließen des Programms jedwede Änderungen direkt löschen.

    Genau das will ich nicht - deshalb frage ich ja, ob es diese Möglichkeit schon irgendwo gibt.

    Deine Fragen werden oben fast alle beantwortet, wenn du dir die Mühe machst, das mal zu lesen. Ressourcen sind nicht das Problem.

    Lieder wiederholst du im Wesentlichen nur Dinge, die schon gesagt wurden.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Beitrag von SteepBrook64153 (12. Mai 2021 um 20:13)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Vielleicht meinst du auch was ganz anderes - aber da du nur die Abkürzung PIL benutzt hast, nehme ich an, du meinst "Python Image Library" - das hat mit Textdokumenterstellung nur sehr am Rande zu tun. Ich will auch nicht, dass ein Superrechner in Hintergrund die Schriftgröße anpasst, bis es hinreicht. Ich will einfach nur, dass der User da wo steht "Herrn Generaloberst Diplom-Ingenieur Professor Doktor Doktor Karl Theodor Meierhofen" mit seinem Curser hingeht und diese viel zu lange Zeile, die in kein Fenster eines Briefumschlags passt, auf "Herrn Prof. Meierhofen" ändert. Oder ähnliche Änderungen im "fertigen" Dokument, die sich halt so ergeben - etwas fett hervorherben, ein Datum ändern, einen Hinweis einfügen...

    Der praktikabelste Ansatz scheint mir immer noch zu sein, ein editierbares Dokument (docx, odt) zu erstellen und in der passenden Anwendung zu öffnen.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Beitrag von SteepBrook64153 (12. Mai 2021 um 21:40)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
    • Offizieller Beitrag

    Auf die Gefahr hin, dass Du mich blockiert hast, frage ich trotzdem.

    also z. B. eine Rechnung, mit Adresse, Produkten, Preisen, Summe, Umsatzsteuer usw... natürlich auch mit Formatierungen, wenigstens grundlegend - Schriftgröße, Fettschrift, Tabulatoren oder Tabellen für Spaltensatz und das alles in den passenden Maßen für ein DIN-A4-Dokument), diese dann vom Anwender noch individuell verändern zu lassen

    Eine Grundsatzfrage... Gibt es ein festes Layout für das gewünschte Dokument? Ich hatte vor vielen Jahren den von Dir gewünschten Kram mal in PHP umgesetzt. Dabei gab es zwei Downloadmöglichkeiten: RTF- und PDF-Datei auf Wunsch auch mit Überweisungsschein. Dazu sollte man aber die internen Formatierungen kennen, die man im Netz nachlesen kann.

    Sollte mich wundern, wenn man das mit Python nicht auch halbwegs komfortabel lösen könnte wie mit PHP.

  • Bringt mich alles leider auch nicht in die Richtung, die ich suche. Ideal wäre ein Wysiwyg-Editor in Kivy - aber das gibts wohl nicht. Außerdem müsste das, was man dann auf dem Bildschirm hat, ja auch noch gedruckt werden. Da haperts generell bei allen Programmierumgebungen erheblich. Eine Art Editor selbst zu programmieren, wäre viel zu aufwändig und ließe sich höchstens noch mit Monospace-Schriften und einfachen Formatierungen machen. Aber bei Proportionalschrift und einfachen Tabellen wird es dann schon schwierig.

    Scheint so, als wäre das Erstellen eines editierbaren Dokuments und anschließendes Öffnen in Word/Open Office die einzige gängige Lösung.

    Mit Programmen wie docx-mailmerge lassen sich Word-Templates mit Daten befüllen, sogar Tabellen mit beliebig vielen Zeilen. Das Handling ist allerdings lästig, denn man muss ja eine Datei außerhalb des Python-Programms verwalten. Also Datei erstellen, speichern, Word aufrufen und Datei öffnen, nach bearbeiten/drucken wieder speichern, ggf. in Python einlesen und als BLOB irgendwo in einer Datenbank speichern. Dabei geht Python aber die Kontrolle über die Inhalte verloren. Ändere ich im Word-Dokument z. B. einen Preis auf einer Rechnung, bekommt das Programm das nicht so einfach mit.

    Sowas wäre mit XML besser zu machen - und ODF ist im Grunde XML. Aber das Handling ist ziemlich schwierig, so weit ich das bisher überblicke.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Hallo,

    ich mach das bei einer Applikation von mir so, dass ich mir Text mit Formatierungsvorschrift als JSON speichen (als Array von Arrays), das JSON dann parse mit mittels Platypus aus ReportLab ein schönes PDF bauen. Das geht auch mit Tabellen, eingebetteten Bildern etc.

    Das ist halt kein WYSIWYG - aber alles geht halt nicht ;) . Was ggf, ginge ist Markdown - dafür gibt es auch WYSIWYG Editoren und das Markdown musst du dann halt in eine druckfähig Form bringen. Eine Alternative wäre ggf. noch HTML bzw. der Einsatz einer Template-Engine wie Jinja2 und das HTML-Dokument dann halt via Pandoc oder so in ein druckfähiges Format bringen.

    Der Vorteil von ReportLab ist IMHO (bzw. deswegen nutze ich es), dass du die volle Kontrolle über das Layout des erzeugten PDFs hast.

    Gruß, noisefloor

  • Ja, das Problem ist halt eher, dass im fertigen Dokument immer noch mal Änderungen nötig sind. Es ist ja kein Problem, ein Dox zu erstellen und in Word zu öffnen. Ich hätte nur gerne die externe Anwendung umgangen und einen Editor direkt in Python benutzt. Viel müsste der ja nicht können - aber wenigstens Tabs und Tabellen.... sowas gibts wohl nicht.

    Das Dokument müsste, damit man es später ggf. noch ändern kann, eben im System (Datenbank, nicht als doc-File) gespeichert werden. JSON wäre eine Möglichkeit.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!