Drucken mit Python ohne GUI

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.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

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.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Benutzeravatar
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
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

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:
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

QtCore ist kein Problem. Schwierig wird es mit python-qt4. Da wird sogar ein Teil von X11 mitinstalliert
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

burli hat geschrieben:QtCore ist kein Problem. Schwierig wird es mit python-qt4. Da wird sogar ein Teil von X11 mitinstalliert
Schau doch mal, ob PySide da weniger benötigt.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Hyperion hat geschrieben: Schau doch mal, ob PySide da weniger benötigt.
Hab ich schon. Will aber seltsamerweise Python 2.6 installieren (Ubuntu 11.10)
Die folgenden NEUEN Pakete werden installiert:
libpyside1.0 libpython2.6 libshiboken1.0 python-pyside.qtcore python2.6
python2.6-minimal
Mal schauen, ob ich PySide für Python 2.7 bekomme
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Was macht euch denn so sicher, dass `QtCore` zum Drucken ausreicht...? :o
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

snafu hat geschrieben:Was macht euch denn so sicher, dass `QtCore` zum Drucken ausreicht...? :o
Nüscht! Hab ich aber nie behauptet ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
lunar

@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…
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@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.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

lunar hat geschrieben:Allerdings erschließt sich mir der Sinn dessen nicht. Papier kann man schließlich nicht über Netzwerkverbindungen verschicken…
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.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
lunar

@burli: Wieso konfigurierst Du dann nicht einfach einen Netzwerkdrucker?
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

lunar hat geschrieben:@burli: Wieso konfigurierst Du dann nicht einfach einen Netzwerkdrucker?
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.

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:
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

lunar hat geschrieben:@burli: Wieso konfigurierst Du dann nicht einfach einen Netzwerkdrucker?
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.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

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
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
lunar

@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.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

lunar hat geschrieben:@burli: Ich weiß nicht, was Du Dir da vorstellst, doch Drucken in einer Webanwendung zu implementieren ist auch aufwendig.
Werde mich mal umschauen. Eventuell probiere ich es doch einmal mit Qt.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
BlackJack

@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.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

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:
BlackJack

@burli: ``lp`` oder ``lpr`` aufrufen!? Wie man das unter Linux halt so macht.
Antworten