Drucken von Textdateien aus Windows

Zurück zur Übersicht

             
Das ist ja nun das Einfachste in einer Programmiersprache, mal ein bissel Text schnell auszudrucken.  Könnte man denken. Aber weit gefehlt. Anfangs war es mir garnicht gleich aufgefallen, dass in allen Pythonbüchern das Thema Drucken garnicht so recht vorkam. Python war so schön, einfach und elegant. Drucken wurde auch nicht gleich gebraucht. Das Resultat wurde in eine Datei geschrieben und die konnte man ja nach Belieben anderweitig ausdrucken.
Wer aber mal ein geschlossenes Programm schreiben möchte, braucht mitunter eben auch eine Druckfunktion. Zuerst fiel es mir auf, als ich mit dem kleinen Python-Texteditor rumexperimentiert habe. Bei Tkinter findet man da nicht viel, und das, was man mit dem Canvas-Widget machen kann führt zu einer Postscript-Datei, die unter Linux ideal ist. Unter Windows sollte es anders gehen. Und wie geht es vielleicht plattformübergreifend? Anscheinend erstmal garnicht.

Nun, vorneweg gesagt, ich habe die große Superlösung hier noch nicht. Wir arbeiten weiter drann. Aber die paar Fragmente, die ich bisher aufgetrieben habe, sollen hier erstmal zur Diskussion gestellt werden.

Also versuchen wir es mal unter Windows. Zuerst habe ich die normalen Einfälle probiert, wie z.B.

import os

os.system('type textdatei > lpt1')

weil solche Sachen ja einst unter DOS auch gingen. Aber weit gefehlt! Es ging nicht! Lpt1 läßt sich anscheinend unter Win32 garnicht mehr direkt ansteuern. Auch statt type z.B. copy textdatei lpt1 funzte nicht. Also schauen wir notgedrungen in Richtung WinAPI. Dazu muss aber zuvor neben Python eine passende Win32 - Ergänzung und Pythonwin installiert sein.

Dann schauen wir uns mal diesen Quelltext an.

Nach dem Start ist zu sehen, dass verschiedene Textfarbe entstehen. Die Zeilenweiterschaltung wird in einer Schleife automatisch weitergezählt.


Einschub für Fortgeschrittene:

Der Ausdruck zeigt, dass die Textposition in Pixeln gemessen wird, denn der Zeilenabstand ist hier 10 Pixel. Die Textfarbe ist laut Docu ein 32-Bit-Wert. Die Zahlenwerte für verschiedene schöne Grundfarben habe ich leider nicht vorzuliegen. Man kann diese aber selbst ausprobieren, indem man die Funktion RGB (siehe Quelltext) anwendet und die zurückgegebenen Zahelnwerte notiert und verwendet. Die Funktion RGB rechnet die Anteile von rot, grün, blau um in den gesuchten 32-Bit Wert.



Inzwischen ist die Diskussion über mögliche Lösungen des Problems eröffnet. Jochim Thöne war so freundlich, ein kleines erstes Programm zur Ausgabe eines Tkinter Widgets an den Drucker zur Verfügung zu stellen. Es ist ein anderer Ansatz einTkinter Widget an den Drucker auszugeben und deshalb für die Diskussion besonders interessant. Auf jeden Fall kann man durch das Beispiel gut nachvollziehen wie Windows Dateien an den Drucker schickt.

Der Quelltext dazu steht hier.