Drucken per PHP?
Linuchs
- projektverwaltung
Hallo,
ich überarbeite gerade mein Profil und meinen Leistungskatalog.
Dabei fällt mir eine Lücke auf. Wie könnte ich mit der Programmiersprache PHP Drucker steuern?
Im Unternehmensnetz könnte man ja einen Drucker auswählen. Kann PHP die Netzwerkdrucker kennen? Und wie würden die PHP- Kommandos lauten, um "Hallo Welt" auf einen bestimmte Drucker zu bringen? Habe das noch nie gemacht, hätte aber zwei Drucker zum Testen.
Wie aber wähle ich einen Drucker aus, wenn PHP im Internet läuft? Bisher musste immer eine Anforderung an den Server herangetragen werden, ich kenne es nicht, dass PHP von selbst etwas "sendet".
Aber ein Drucker kann doch wohl kaum alle paar Sekunden anfragen, ob ein Druckvorgang vorliegt?
Da Browser doch nur recht begrenzt für das Drucken taugen, habe ich bisher PDF- Dateien erstellt, die müssen aber aktiv heruntergeladen und von Hand zum Drucken angestoßen werden. Alles Arbeitsschritte, die früher (vor dem Internet) nicht erforderlich waren.
Linuchs
Dabei fällt mir eine Lücke auf. Wie könnte ich mit der Programmiersprache PHP Drucker steuern?
Serverseitig:
system('lpr datei');
Clientseitig: Eigentlich gar nicht. Es sei denn Du erfindest einen Dateityp (z.B. 'x-appliaction/print') und kombinierst mit einem Helper-Program, dass sofort ausdruckt. und sendest diesen Dateityp im header.
Dazu musst Du freilich sämtliche Clients (und auf diesen alle Browser) "manuell" einrichten.
fred
Hallo fred,
Serverseitig:
system('lpr datei');
Danke, werde mir das mal genauer anschauen.
Clientseitig: ... Dazu musst Du freilich sämtliche Clients (und auf diesen alle Browser) "manuell" einrichten.
Demnach muss der Druck zwangsweise über einen Browser laufen? Wie soll das gehen bei einem Smartphone? Da gibt es doch gar keinen Druckbefehl.
Ich stelle mir vor, dass Drucker (sie haben ja eine eigene IP - meine sogar eine eigene Webseite) aus dem Internet direkt angesprochen werden. Ich kann doch auch manche Webkameras schwenken und zoomen.
Linuchs
Demnach muss der Druck zwangsweise über einen Browser laufen?
Nein. Aber wenn Du "PHP" sagst, dann denke ich eher nicht an Skripte, die als CLI laufen. Ich denke da an einen Webserver (normalerweise Apache) und den Austausch mit einem Webbrowser.
Wie soll das gehen bei einem Smartphone? Da gibt es doch gar keinen Druckbefehl.
Ich bin jetzt verwirrt. Läuft denn PHP auf Deinem Smartphone? Vielleicht willst Du näher erläutern wie und wo Du denn nun drucken willst, denn wir haben es mit mindestens 4 Programmen (Webserver, Webclient, PHP, Druckprogramm) zu tun von denen das Druckprogramm (lpr) auf dem Client oder dem Server laufen kann.
Demnach muss der Druck zwangsweise über einen Browser laufen?
Nein. Aber wenn Du "PHP" sagst, dann denke ich eher nicht an Skripte, die als CLI laufen. Ich denke da an einen Webserver (normalerweise Apache) und den Austausch mit einem Webbrowser.
Ich habe PHP- Programme, die umfangreiche Berechnungen vornehmen (ich muss sogar die PHP-Laufzeit mehrfach verlängern), angestossen mit einem Browser. Aber das Ergebnis ist nicht abhängig vom Vorhandensein eines Browsers.
Und ich habe PHP- Programme, die massenhaft PDF- Dateien erzeugen und als Mail versenden, auch per Browser angestossen. Ebenso PHP- Programme, die hunderte von Seiten drucken sollten, aber nur 50er Potionen an den Browser senden. Schon beim Wechsel von Hoch- zu Querformat muss ein Mensch die Browser-Parameter ändern. Wenn er das vergisst, ist der ganze Papierstapel für den Müll. Irgendwie EDV- Krampf.
Wie soll das gehen bei einem Smartphone? Da gibt es doch gar keinen Druckbefehl.
Ich bin jetzt verwirrt. Läuft denn PHP auf Deinem Smartphone?
Eben nicht. Deshalb sollte ein Außendienstmitarbeiter die Möglichkeit haben, per Smartphone / Tablet einen Druck in der Zentrale auszulösen. Angebot, Auftrag, Packzettel, was auch immer.
Linuchs
Eben nicht. Deshalb sollte ein Außendienstmitarbeiter die Möglichkeit haben, per Smartphone / Tablet einen Druck in der Zentrale auszulösen. Angebot, Auftrag, Packzettel, was auch immer.
Jetzt ist es so, dass ein Mitarbeiter das System von zuhause bedienen kann. Aber er hat dort weder einen schnellen Colorlaser noch die Unterlagen, die der Post hinzugefügt werden müssen wie Kataloge und Infoblätter.
Also muss er - nur zum Drucken - ins Büro fahren.
Das Zusammenstellen und kuvertieren machen ohnehin andere.
Linuchs
Eben nicht. Deshalb sollte ein Außendienstmitarbeiter die Möglichkeit haben, per Smartphone / Tablet einen Druck in der Zentrale auszulösen. Angebot, Auftrag, Packzettel, was auch immer.
Dann ist Variante 1 mit den Untervarianten
A) $dummy=system ('lpr datei.pdf') oder
B) $dummy=exec ('lpr datei.pdf') oder
C) $dummy=lpr datei.pdf
Dein Freund.
Der Rest steht in der Manpage zu lpr.
A) $dummy=system ('lpr datei.pdf') oder
B) $dummy=exec ('lpr datei.pdf') oder
C) $dummy=lpr datei.pdf
Okay, das gilt dann für den Sonderfall, dass der PHP-Server und die Drucker in demselben LAN sind.
Die Frage ist noch offen, wie man solche Drucker ansprechen könnte, die "nur" über das Internet erreichbar sind. Also Server in Frankfurt, Drucker in Mainz.
Ein Browser könnte sich ja noch Webseiten abholen durch Neuladen alle paar Sekunden. Aber ich kenne keine Möglichkeit, dem Browser mitzuteilen, dass er nun ohne zusätzlichen menschlichen Eingriff drucken soll.
Das Javascript-Kommando "print" öffnet lediglich einen Dialog, aber druckt nicht. Habe ich da was übersehen?
Linuchs
Das Javascript-Kommando "print" öffnet lediglich einen Dialog, aber druckt nicht.
Das ist der technische Stand wie vor 30 Jahren. Das Telefon klingelt und ich musste von Hand das Faxgerät aktivieren.
Hallo,
Das Javascript-Kommando "print" öffnet lediglich einen Dialog, aber druckt nicht.
das ist gewollt, damit nicht irgendein Scherzkeks von seiner eigenen Shopseite aus 10 Seiten Werbung auf dem Drucker des Besuchers ausdruckt.
Das ist der technische Stand wie vor 30 Jahren. Das Telefon klingelt und ich musste von Hand das Faxgerät aktivieren.
Nicht alles, was hinkt, ist ein Vergleich. ;-)
Ciao,
Martin
A) $dummy=system ('lpr datei.pdf') oder
B) $dummy=exec ('lpr datei.pdf') oder
C) $dummy=lpr datei.pdf
Okay, das gilt dann für den Sonderfall, dass der PHP-Server und die Drucker in demselben LAN sind.
Die Frage ist noch offen, wie man solche Drucker ansprechen könnte, die "nur" über das Internet erreichbar sind. Also Server in Frankfurt, Drucker in Mainz.
Dann wirst Du das CUPS auf dem Webserver so einrichten müssen, dass es den Drucker in der Firma kennt und das CUPS auf dem Druckserver in der Firma so, dass es diese Druckaufträge auch akzeptiert. Ferner die Firewalls so, dass diese den Datentransport erlauben.
Andere Möglichkeit:
Du überträgst eine Datei mit ssh zum Druckserver in der Firma.
system ('scp /tmp/5jh56 drucker@server.firma.de/home/drucker/printdir/' . date("Y-m-d_H:i:s.u") . '.pdf' ); echo $?
(gibt ein "0" zurück, wenn es funktioniert hat, 1 oder größer je nach Fehler)
Dort hockt ein Cronjob (sh-Skript), der aller Minuten nachschaut, ob Dateien in /home/drucker/printdir/ liegen und dann a) druckt und b) in einen anderen Ordner verschiebt. (Nicht löschen, falls der Druckjob daneben geht!). Sollte vielleicht auch ein Logfile schreiben, ggf. per ssh auf dem Webserver eine textdatei ablegen, die anzeigt, ob der Job wenigstens erfolgreich zum Drucker gesendet wurde.
Wenn Du ssh mit einer Schlüsseldatei betreibst ist das alles kein Problem. Nur sollte der Nutzer "drucker" eher unterprivilegiert sein.
Hehe, Du nennst Dich "Linuchs". Da müsstest Du das geradezu erfunden haben! Mir jedenfalls fallen dazu gleich eine ganze Reihe von Möglichkeiten ein, nur kenne ich die Grenzen des Dir technisch möglichen nicht.
Du überträgst eine Datei mit ssh zum Druckserver in der Firma.
Da war ein Fehler:
system ('scp /tmp/5jh56 drucker@server.firma.de/home/drucker/printdir/' . date("Y-m-d_H:i:s.u") . '.pdf; echo $?');
Om nah hoo pez nyeetz, Jörg Reinholz, Schlosser!
Willkommen zurück.
Matthias