Eine kurze Frage vor Weihnachten. Wie kann man mit Python drucken, ohne ein Toolkit wie Qt oder wx verwenden zu müssen? Alle Infos, die ich finde, verwenden ein Toolkit.
Konkret geht es darum, dass ich eine Webanwendung mit Flask erstellen möchte, die jedoch auf einem lokalen Server laufen soll der gleichzeitig mein Printserver ist. Und ich möchte mir den Umweg über die PDF Ausgabe auf dem Desktop sparen.
Drucken mit Python ohne GUI
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Was spricht denn gegen Qt? Das ist ja nicht nur ein GUI-Toolkit, sondern ein ganzes Framework, was eben mehr umfasst, als nur den GUI-Teil.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Stimmt eigentlich. QtCore müsste ja reichen. Mal schauen, ob das geht, ohne gleich einen Rattenschwanz an Abnhängigkeiten zu installieren
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Schau doch mal, ob PySide da weniger benötigt.burli hat geschrieben:QtCore ist kein Problem. Schwierig wird es mit python-qt4. Da wird sogar ein Teil von X11 mitinstalliert
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Hab ich schon. Will aber seltsamerweise Python 2.6 installieren (Ubuntu 11.10)Hyperion hat geschrieben: Schau doch mal, ob PySide da weniger benötigt.
Mal schauen, ob ich PySide für Python 2.7 bekommeDie folgenden NEUEN Pakete werden installiert:
libpyside1.0 libpython2.6 libshiboken1.0 python-pyside.qtcore python2.6
python2.6-minimal
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Nüscht! Hab ich aber nie behauptetsnafu hat geschrieben:Was macht euch denn so sicher, dass `QtCore` zum Drucken ausreicht...?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
@hyperion: Zwischen PySide und PyQt4 besteht in dieser Hinsicht nicht der geringste Unterschied. PySide kann schließlich nicht auf magische Weise die Abhängigkeiten von Qt verändern.
@burli. QtCore reicht keinesfalls, die zum Drucken nötigen Klassen befinden sich in QtGui. Diese Bibliothek hängt zwar von X11-Bibliotheken ab, ein laufender X11-Dienst ist allerdings nicht nötig, um tatsächlich aus einer laufenden Anwendung heraus zu drucken. Allerdings sind die entsprechenden Qt-Klassen nicht threadsicher, und mithin ist es schwierig, Qt direkt in einer per se nebenläufigen Umgebung zu verwenden. Im Zweifelsfall ist es ratsamer, einen separaten Dienst zum Drucken zu implementieren, der dann von der Webanwendung angesprochen wird.
Allerdings erschließt sich mir der Sinn dessen nicht. Papier kann man schließlich nicht über Netzwerkverbindungen verschicken…
@burli. QtCore reicht keinesfalls, die zum Drucken nötigen Klassen befinden sich in QtGui. Diese Bibliothek hängt zwar von X11-Bibliotheken ab, ein laufender X11-Dienst ist allerdings nicht nötig, um tatsächlich aus einer laufenden Anwendung heraus zu drucken. Allerdings sind die entsprechenden Qt-Klassen nicht threadsicher, und mithin ist es schwierig, Qt direkt in einer per se nebenläufigen Umgebung zu verwenden. Im Zweifelsfall ist es ratsamer, einen separaten Dienst zum Drucken zu implementieren, der dann von der Webanwendung angesprochen wird.
Allerdings erschließt sich mir der Sinn dessen nicht. Papier kann man schließlich nicht über Netzwerkverbindungen verschicken…
@lunar: Er spricht ja von einem Printserver. Ich könnte mir das so vorstellen, dass z.B. in einer Firma die Mitarbeiter diverse Druckaufträge für die Ausgangspost an eine lokale Stelle versenden, welche sich um das Ausdrucken, Eintüten und Versenden der Dokumente kümmert. Das nur mal als griffiges Beispiel. Wie das beim TE aussieht, kann natürlich keiner wissen.
Der Server steht hier lokal. An dem Server hängt der Drucker und die Anwendung soll darauf laufen. Es gäbe also keinen Unterschied, ob ich direkt von der Webanwendung drucke oder über den Desktop. Das Papier kommt am gleichen Drucker raus.lunar hat geschrieben:Allerdings erschließt sich mir der Sinn dessen nicht. Papier kann man schließlich nicht über Netzwerkverbindungen verschicken…
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Der Drucker ist im Netzwerk. Aber was bringt mir das? Printserver und Webserver sind auf dem gleichen Rechner. Und wie ich gesagt habe möchte ich nicht den Umweg über PDF oder dem Ausdrucken einer Webseite gehen.lunar hat geschrieben:@burli: Wieso konfigurierst Du dann nicht einfach einen Netzwerkdrucker?
Außerdem soll es auch optional von einem Android Tablet funktionieren. Und da hab ich es noch nicht geschafft zu drucken. Für mich ist die einzig sinnvolle Lösung, direkt aus der Webanwendung zu drucken. Ob das jetzt "direkt" ist oder über den Umweg irgend eines Dienstes, der parallel noch läuft, ist mir mal egal.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Eine Erklärung wäre, dass die Anwendung halt auf einem entfernten System läuft und auf diesem System auch gedruckt wird. Wieso sollte man da einen Netzwerkdrucker ins Spiel bringen? Ich kenne das von der Arbeit: Wir haben da eine Citrix-Umgebung und wenn da über den sogenannten "Printshop" gedruckt wird, dann landet der tatsächliche Ausdruck viele Kilometer entfernt in der Zentrale. Demgegenüber haben wir innerhalb der Abteilung nochmal nen eigenen Netzwerkdrucker, der halt für interne Zwecke, d.h. nicht für die Ausgangspost verwendet wird.lunar hat geschrieben:@burli: Wieso konfigurierst Du dann nicht einfach einen Netzwerkdrucker?
Ein Grund ist unter anderem, dass ich gerne für bestimmte Druckaufträge den Drucker (ich hab mehrere), den Druckschacht und die Menge vordefinieren möchte. Wenn ich das via PDF vom Desktop Rechner mache muss ich bei jedem Ausdruck die Einstellungen ändern, was auf Dauer echt nervig ist.
Mit räumlichen Gegebenheiten hat es nichts zu tun. Alle Drucker sowie Print/Webserver sind an einem Ort versammelt. Nur arbeiten tue ich aus verschiedenen Räumen, wobei ein Rechner im selben Raum steht wie der Server.
Und wie gesagt, Webseiten oder PDFs von einem Android Tablet ausdrucken geht nicht. Oder zumindest nur mit Aufwand/Geld
Mit räumlichen Gegebenheiten hat es nichts zu tun. Alle Drucker sowie Print/Webserver sind an einem Ort versammelt. Nur arbeiten tue ich aus verschiedenen Räumen, wobei ein Rechner im selben Raum steht wie der Server.
Und wie gesagt, Webseiten oder PDFs von einem Android Tablet ausdrucken geht nicht. Oder zumindest nur mit Aufwand/Geld
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
@burli: Ich weiß nicht, was Du Dir da vorstellst, doch Drucken in einer Webanwendung zu implementieren ist auch aufwendig.
In Qt selbst ist es nicht möglich, einfach Dokumente oder beliebige Daten drucken. Im Zweifelsfall musst Du also alles bis hinunter zum einzelnen Strich auf der Druckseite selbst implementieren. Hinzu kommt, dass Drucken jenseits des Standardfalls plattformabhängig ist. Je nach Betriebssystem stehen Dir manche Druckereinstellungen unter Qt gar nicht zur Verfügung, unter Linux beispielsweise eben der Papiereinzugsschacht. Unter Windows wiederum werden manche Einstellungen direkt durch den Druckertreiber implementiert und sind für die Anwendung gar nicht erreichbar, daher auch die unterschiedlichen Druckdialoge verschiedener Hersteller und Modelle.
Unter Unix kannst Du alternativ versuchen, die Daten über die Kommandozeile zu drucken, vorausgesetzt Deine Drucker werden unterstützt. Da kannst Du auch alle Optionen setzen, allerdings sind die soweit ich weiß wiederum treiberspezifisch.
@snafu: Ich glaube, ein solcher „Printshop“ ist ein paar Nummern größer als burlis vorhaben. Normalerweise stehen dort auch andere Drucker als beim normalen Anwender, in der Regel astronomisch teure High-End-Postscript-Drucker mit ziemlich umfangreichen Möglichkeiten zur Fernwartung.
In Qt selbst ist es nicht möglich, einfach Dokumente oder beliebige Daten drucken. Im Zweifelsfall musst Du also alles bis hinunter zum einzelnen Strich auf der Druckseite selbst implementieren. Hinzu kommt, dass Drucken jenseits des Standardfalls plattformabhängig ist. Je nach Betriebssystem stehen Dir manche Druckereinstellungen unter Qt gar nicht zur Verfügung, unter Linux beispielsweise eben der Papiereinzugsschacht. Unter Windows wiederum werden manche Einstellungen direkt durch den Druckertreiber implementiert und sind für die Anwendung gar nicht erreichbar, daher auch die unterschiedlichen Druckdialoge verschiedener Hersteller und Modelle.
Unter Unix kannst Du alternativ versuchen, die Daten über die Kommandozeile zu drucken, vorausgesetzt Deine Drucker werden unterstützt. Da kannst Du auch alle Optionen setzen, allerdings sind die soweit ich weiß wiederum treiberspezifisch.
@snafu: Ich glaube, ein solcher „Printshop“ ist ein paar Nummern größer als burlis vorhaben. Normalerweise stehen dort auch andere Drucker als beim normalen Anwender, in der Regel astronomisch teure High-End-Postscript-Drucker mit ziemlich umfangreichen Möglichkeiten zur Fernwartung.
Werde mich mal umschauen. Eventuell probiere ich es doch einmal mit Qt.lunar hat geschrieben:@burli: Ich weiß nicht, was Du Dir da vorstellst, doch Drucken in einer Webanwendung zu implementieren ist auch aufwendig.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
@burli: PDF wäre keine Lösung? Du musst damit ja nicht den Umweg über den Desktop gehen, sondern kannst das PDF auf dem (Web|Print)server erzeugen und dort auch gleich an den Druckdienst verfüttern. Normalerweise sind bei Druckerspoolern unter Linux Filter für PDF und PostScript eingerichtet, so dass man diese Formate "direkt" drucken kann.
Natürlich, irgend ein Format werde ich erzeugen. Entweder PDF oder HTML oder ReportLab oder was auch immer. Es geht mir darum, wie ich das Format dann anschließend zum Drucker bekomme.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol: