Alexander (HH): Verschiedene Drucker ansprechen

Beitrag lesen

Moin Moin!

Ich schmeiß nochmal CUPS in die Runde, oder genauer das Internet Printing Protocol. Etwas vereinfacht machst Du einen TCP-Socket auf, sprichst HTTP mit dem Printserver, und übergibst einen Druckjob. Das Rastern kann der IPP-Server übernehmen, oder der Drucker selbst. Der Druckjob kann also Postscript, PCL oder ähliches, aber auch schon fertig "vorverdaut" für den Drucker sein.

Der Trick ist, dass der Client hier durchaus ein PHP-Script auf dem Webserver sein kann.

Windows ab 2000 kann auf jeden Fall als Client einen IPP-Server benutzen, es müßte aber auch einen IPP-Server für Windows geben. Letzteren bräuchtest Du. CUPS läuft leider nicht auf Windows, soweit ich weiß.

Wenn Du Deine Anwendung auf Linux oder *BSD aufsetzen würdest, wäre das etwas einfacher, denn da ist CUPS in aller Regel gleich mit dabei (Apache, MySQL und PHP sowieso). Und wenn Du den Rechner wirklich nur als Kasse mit dem Webbrowser als Frontend benutzt, sehe ich nicht, was dagegen spricht. Ob ein Browser nun auf Windoof oder einem Unix fullscreen läuft, merkt der Benutzer gar nicht. Autostart und Auto-Login lassen sich bei Bedarf auch in Umgebungen wie Gnome, KDE und XFCE (sehr empfehlenswert, schlanker als die beiden anderen) einrichten.

Zweiter Ansatz, etwas pragmatischer:

Beide Drucker bekommen einen Printserver, entweder je einen eigenen (wenn nicht ohnehin schon eingebaut) oder einen mit zwei bis drei Druckeranschlüssen. Die werden typischerweise über TCP Port 9100 mit Druckerdaten gefüttert, so wie sie am Drucker ankommen müssen (sprich: Socket auf, Daten rein, Socket zu), bei Multiport-Printservern liegt der erste Port auf TCP Port 9100, der zweite auf 9101, der dritte auf 9102 usw. Manche Printserver können noch viel mehr (LPT, IPP -- siehe oben, Novell, Windows, Apple), aber das primitive Port9100-Protokoll (oft "JetDirect" genannt) aus Zeiten schwacher Hardware beherrschen sie eigentlich alle.

Als Seitendrucker für die Berichte nimmst Du einen monochromen Laserdrucker mit Postscript, dem drückst Du direkt aus PHP heraus Postscript rein. Den den Kartendrucker wirst Du vermutlich ohnehin mit seinen eigenen, sehr speziellen Steuersequenzen bedienen müssen, über die Du außerhalb des Browsers wesentlich mehr Kontrolle hast.

Beide Ansätze lassen sich kombinieren, insbesondere wenn der Server ein Unix-Derivat ist, denn natürlich beherrscht auch CUPS das Port9100-Protokoll.

Mit einem Unix-Derivat auf einem dedizierten Server läßt sich dann auch gleich der nächste Schritt realisieren: Mehrere Kassen als Thin Clients laden ihr Betriebssystem mitsamt lokalen Webbrowser und einem lokalen Port9100-Server vom Server, z.B. mit Etherboot als Bootloader und Thinstation, dem firefox- und dem lp_server-Paket als Betriebssystem. Dann kann der Drucker an der Kassenstation hängen, aber gedruckt wird vom Server via Port9100 oder, etwas komfortabler über CUPS auf dem Server. Die Entscheidung, auf welchen Drucker eine Eintrittskarte gedruckt werden soll, ist dann ganz einfach: Immer auf den, zu dem die REMOTE_ADDR gehört, die der Webserver an PHP weiterreicht.

Thin Clients mußt Du übrigens nicht neu kaufen, dafür eignet sich fast jeder alte PC, dem Du eine Netzwerkkarte mit Boot-PROM oder eine Boot-Diskette (auch mit Etherboot) verpaßt, wahlweise kannst Du auch Thinstation von CD starten, dann muß aber in jeder Kasse ein CD-Laufwerk stecken. Mit dem Boot-Prom kann der Kassenrechner komplett ohne Massenspeicher laufen, keine Floppy, keine Festplatte, kein CD-Laufwerk. Das spart jede Menge Platz, Strom und letztlich auch Abwärme, wodurch oft auch der letzte Lüfter entfallen oder stark heruntergeregelt werden kann.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".