WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Wie arbeitet ein Drucker-Treiber? (http://www.wcm.at/forum/showthread.php?t=106405)

Walter 22.08.2003 17:22

Wie arbeitet ein Drucker-Treiber?
 
Hallo Experten!

Ich würde gerne wissen, wie ein Anwendungsprogramm einen Drucker-Treiber anspricht, was übergeben wird, was der Treiber eigentlich daraus macht und welche Steuer-Elemente er von sich aus an den Drucker schickt.....

nicht speziell für ein Druckermodell oder einen bestimmten Treiber, sondern eher mehr allgemein....

Vielleicht hat wer einen Link zu entsprechenden Dokumentationen?

Who-T 23.08.2003 05:20

postscript drucker bekommen postscript files wenn ich mich nicht irre.

unter dem stichwort findest sicher haufenweise material

kikakater 23.08.2003 10:00

Das Drucken ist unter Windows standardisiert. Die Druckertreiber erledigen die Arbeit, die das Windows System vorbereitet hat. Es geht also in erster Linie nicht um den Druckertreiber (jeder Drucker wird entsprechend seinem Befehlssatz unterschiedlich durch ein proprietäres (=eigenständiges) Druckertreiberprogramm angesteuert) sondern um das GDI (graphical device interface) von Windows. Bei "Postscript und 'Derivaten davon(=von Postscript)'" wird eine Metadatei mit Objektbefehlen und Parameterdaten an den Drucker geschickt (eine Postscript(befehls)DATEI also). Dies generiert (=zeichnet =rendert) die auszudruckende Seite im Drucker, weil dafür ein Postscript verstehender Chip im Drucker vorhanden ist.

Beim GDI hingegen wird eine Bitmapseite im COMPUTERSPEICHER (und somit nicht wie bei Postscript im Druckerspeicher) aufgebaut und die einzelnen Pixelzeilen an den Drucker in sogenannten Bands (mehrere Pixelzeilen) geschickt.

Das Zeichnen von Linien und Kreisen, Text und Bitmapgrafikbildern übernimmt also das GDI (=ein bzw. der wesentlichste Teil von Windows). Wobei das GDI durch Funktionsaufrufe aus dem Anwendungsprogramm unter Bekanntgabe des Drucker Gerätekontextes benutzt wird um die bestimmten Objekte in den Computerspeicher (die spätere Seite auf dem Druckerpapier) zu schreiben.

Bei einem Postscript Drucker passiert dieses "Zeichnen" im Drucker selbst. Es wird der druckereigene RAM Speicher beschrieben und nach Abarbeitung aller Postscriptbefehle das Bild durch die Tonereinheit (zumeist sind PS fähige Drucker Laserdrucker) ausgegeben.

Bei einigen Derivaten von Postscript (=PS, Abk.) wie es zum Beispiel "Ghostscript" darstellt, passiert das Zeichnen wiederum im Computer durch einen zwischengeschaltenen virtuellen Postscriptdruckertreiber, der nichts anderes tut als Postscriptbefehle abzuarbeiten und ein Bild im Computerspeicher zu erzeugen. Das fertige Dokument (Bitmapbild) kann dann von einem regulären Druckertreiber ausgedruckt werden, indem man im Dialogprogramm des Frontend Programms für Ghostscript einen Druckertreiber bei der Installation/Parametrierung angibt und dieser dann aufgerufen wird.

Der Grund warum Postscript fähige Drucker weniger Auflösung haben als GDI Drucker liegt also am installierten (begrenzten) RAM Speicher im Drucker. 600 x 600 dpi sind üblich. Der Speicher macht diese Art von Druckern teurer als zum Beispiel Tintenstrahldrucker mit wenig "Band" RAM Speicher.

Was im Windows passiert ist also ein Funktionsaufruf für die Ausgabe von z.B. Text unter Angabe einer sogenannten Handle(=Begriffs)nummer für den Druckergerätekontext. Im Druckergerätekontext sind Dinge wie der aktuelle Zeichensatz, der Hintergrund (Bitmap oder Einzelfarbe etc.) und Verknüpfungsmodi wie "transparent" oder "opaque" (=deckend) hinterlegt und eingestellt (durch das Anwendungsprogramm).

Dieser als Beispiel ausgegebene Text wurde beim Füllen in die Bitmapdokumentenseite auf die richtige (=aktuell eingestellte) Größe umgerechnet und von einer Vektorschrift (TTF) bzw. Bitmapschrift (FON) in ein Pixelmuster umgesetzt und in den Computerspeicher (eben die Bitmapdokumentenseite) kopiert.

Für den Programmierer gibt es einige Funktionen wie StartDoc, AbortDoc und EndDoc sowie die eigentlichen GDI Ausgabe- und Resourcenanforderungs/ sowie -verwaltungsfunktionen.

mfg Kikakater

LDIR 23.08.2003 16:44

Drucker arbeiten auch mit sogenannten ESC-Sequenzen. Also zuerst wird ein ESC-Steuercode gesendet, z.B. 27 Dez., dann kommt der Befehl, z.B. Auf Grafikmodus umschalten, oder Farbe wechseln, Befehlsparameter werden gesendet, z.B. Anzahl der Grafikspalten, dann erst werden die Daten z.B. Bitmapabbild der Grafiken geschickt. Bis die Daten fertig übertragen sind, können darin auch ESC-Codes enthalten sein, und werden halt ignoriert bis die Datenlänge aus dem Parameterbereich erreicht ist.
Habe mal einen Farbdruckertreiber für Sinclair Spectrum und Canon BJC 620 geschrieben, da gibt es kein Postscript uder GDI... Und wenn man das beherrscht, kann man auf dem Prinzip aufbauend auch am PC jeden Drucker betreiben.
Für normale Anwendungen am PC würde ich das unterstreichen was kikakater geschrieben hat. Ist alles völlig korrekt. GDI Drucker brauchen nicht den Speicher, und sind deswegen kostengünstiger herzustellen. Man zeichnet auf einem GDI Image genauso mit API Befehlen wie auf einem Bildschirm-Image, was vieles vereinfacht. Am schluss wird halt alles in den Drucker geflusht, und der druckt es aus.

kikakater 23.08.2003 17:12

Der "Drucker-Daemon" (also die Druckerwarteschlange und deren programmiertechnische Umsetzung) verarbeitet das was in den Spooler (=virtueller Druckerjobpufferspeicher =eigentlich Festplattenplatz) durch die Anwendung (mittels StartDoc und EndDoc etc. <-- API Druckjobfunktionen) geschickt worden ist. Aus dem Spooler (mittels GUI Frontend oder Applet) kann man einzelne Druckjobs stoppen oder ganz abbrechen und somit löschen.

Natürlich war vor Windows mit seinem GDI und dem Spooler alles Angelegenheit des Programmierers eine korrekte Ausgabe auf dem Drucker zu schaffen.

Heutzutage schickt man dies durch das GDI an den Drucker (über den speziellen Windowsausgabetreiber des Druckers). Das GDI verwendet Metabefehle wie Standard ESC Sequenzen oder Farbwerte. Diese Befehle werden vom Druckertreiber in die spezifischen Befehle oder ESC Sequenzen + Druckdaten umgewandelt, die der Drucker versteht.

kikakater 23.08.2003 17:23

"spooling" heißt soviel wie "[Heraus-]rollen/-pumpen" (substantiviertes Zeitwort)


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag