Wie kann ich einen Druck-Befehl an einen Drucker im LAN senden?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

das was du machen willst ist  ziemlich easy und zwar OHNE  druckerauswahl einstellung und mit puren JavaScript,... das protokol das du dafür brauchst nennt sich IPP (ipp kann jeder netzwerkdrucker) und damit kannst du auch zb von zuhause aus ein printjob übers internet jagen an einen drucker der in kalkutta steht :D

musst aber nicht selbst eine ipp implemtierung vornehmen, in dem link unten hat schon jemand ein ipp library erstellt für javascript, hab die selbst sogar mal getestet, dort auf der seite steht auch ein beispielcode für die noobs, damit sollten alle fragen geklärt sein  :D github.com/williamkapke/ipp


Roderic  02.06.2015, 04:09

So kriegst Du aber nur ASCII Text gedruckt.
Für grafische Sachen oder Dokumente brauchst Du den Druckertreiber des jeweiligen Betriebssystems. Oder Du musst deine Grafiken mit PostScript selber aufbereiten.

0
martin7812  02.06.2015, 11:50

ipp kann jeder netzwerkdrucker

Ich selbst hatte schon drei Netzwerkdrucker bei mir zuhause.

Eines der drei Modelle wird heute noch verkauft.

Keiner der drei Drucker konnte IPP, sondern alle haben nur mit der jeweiligen mitgelieferten Software funktioniert, die jeweils ein proprietäres Protokoll verwendet hat.

0
hashpipeotto  02.06.2015, 13:10
@martin7812

was ja im prinzip ein armutszeugnis ist, ein aktueller NETZWERKdrucker der nicht den offenen standard IPP kann ist genauso wie ein webbrowser der http nicht kann :D .... ist das zufällig ein dell drucker? hab ein drucker im netz von dell (weiss jetzt nicht genau wer der originaldruckerhersteller ist weil dell ja nicht selbst produziert)  mit dem klappt IPP auch nicht, der läuft auch NUR unter M$,  kann nicht mal unter linux betrieben werden, weil dell sein treiber dafür nicht rausbringt .... sehr gute erfahrung hab ich dagegen mit brother druckern gemacht, die laufen alle mit ipp, cups, linux...  :D

0
martin7812  02.06.2015, 14:32
@hashpipeotto

Die drei Drucker waren von HP, OKI und Phillips.

Ich gehe davon aus, dass 99,99% aller an Privatkunden verkauften Drucker keine "offenen" Standards (wie PostScript) unterstützen, sondern die Daten in einem proprietären Format verlangen.

Bei Preisen ab 50 Euro für einen Drucker müssen die Hersteller überall sparen - selbst, wenn es nur um wenige Cent geht - also auch and der CPU des Druckers.

Deswegen verlegen die Hersteller wohl rechenzeitintensive Routinen, die bei PS, IPP & Co. auf der CPU des Druckers gemacht werden würden auf die CPU des Host-Computers - was zur Folge hat, dass der Drucker eben nur noch proprietäre Protokolle unterstützt.

0

Der Drucket versteht kein PNG. Entweder braucht man den Drucktreiber den man auch aus Java ansteuern kann und dann ist es egal was das für ein Drucker ist und wo der dran hängt oder der Drucker versteht PS oder PDF daten die man auf verschiedene Arten z.B. per FTP oder Windows Freigabe übertragen kann. Die HP Officemonster verstehen in der Regel PDF das man per FTP oder TFTP hoch lädt.

Naja, es ist eine Programmiersprache. Am Computer ist bekanntlich alles möglich und in der Programmierung erst recht. Ich habe im Internet auch schon viele Antworten gesehen aber die waren alle mit HTML und ich habe KEINE ahnung von HTML.

Notfalls sollte es auch gehen wenn man ein Dokument (eine fertige druckanfrage) enfach sendet oder?

triopasi  02.06.2015, 00:12

Was? JavaScript? Das ist keine Programmiersprache :)

0
JayHorr 
Fragesteller
 02.06.2015, 00:13
@triopasi

Skriptsprache und Programmiersprache. Ist nicht das selbe aber ähnlich.

0
triopasi  02.06.2015, 00:18

JS ist 'webbasiert' (also Teil des Webbrowsers und die Scripts kommen jeweils aus dem Internet als Teil einer Website). JS hat nicht die gleichen Möglichkeiten ('Rechte') wie Java zB!!

0
JayHorr 
Fragesteller
 02.06.2015, 00:20
@triopasi

Gut. Dann versuche ich es anderweitig. Danke.

Anbei, kennst du da noch etwaige möglichkeiten das zu tun?

0
triopasi  02.06.2015, 00:43

Etwas Drucken mit JS? Die normale Variante mit den Einstellungen nutzen?

0
martin7812  02.06.2015, 11:57

JS ist zwar eine Programmiersprache, jedoch geht damit nicht alles, was z.B. in C++ möglich ist - zumindest dann, wenn man JS in einer HTML-Seite einbettet. Der JS-Interpreter bzw. JIT-Compiler blockt mit voller Absicht viele Funktionen.

Dies ist aus Sicherheitsgründen notwendig. Das Beispiel, dass beim Besuch einer Webseite sofort 1000 Seiten gedruckt werden, hat ein anderer User ja bereits gebracht.

Soviel ich weiß blockt der JS-Interpreter sogar den Versuch, eine Webseite herunterzuladen, die auf einem anderen Server liegt als das JS-Programm.

0
hashpipeotto  02.06.2015, 13:26
@martin7812

1) wenn ich ein webseite programmiere bei der ich die ip adresse von dem user auslese und per ipp ein printjob an seine ip + port 631 sende kann durchaus der druckauftrag ausgeführt werden, natürlich muss der user ein drucker haben der im netzwerk steht und ipp kann und auch vom internet erreichbar ist .... aber rein theoretisch ist das möglich :D

2) content anderer domain lässt sich leicht mit javascript über "jsonp" auslesen :D

3) alle was mit c++ geht, geht auch in js, js spricht nämlich c++ an

1
hashpipeotto  02.06.2015, 13:54
@hashpipeotto

ja bei clientseitigem JS gibts natürlich (noch)  paar restriktionen :D, serverseitig ist JS im prinzip nur ein wrapper für darunterliegendes c++, wird dann per high level API gesteuert  :D

0
martin7812  02.06.2015, 14:41
@hashpipeotto

und per ipp ein printjob an seine ip + port 631 sende

Bei den fünf verbreiteten Webbrowsern (MSIE, Firefox, Opera, Chrome, Safari) gilt folgendes:

Die einzige IP-Adresse, mit der ein JavaScript-Code kommunizieren kann, ist die IP-Adresse des Servers, auf dem die Webseite liegt.

Das hat mir jemand erzählt, der hauptberuflich in der Webentwickler-Branche arbeitet.

Sofern der Netzwerkdrucker nicht dieselbe IP-Adresse hat wie der Webserver, scheidet diese Möglichkeit also schon mal aus - es sei denn der User würde irgendeinen extrem seltenen Browser verwenden.

Vom Webserver aus einen Printjob absenden funktioniert auch nicht - sofern sich dieser nicht im lokalen Netz befindet: Der DSL-Router würde den Printjob gar nicht erst ins lokale Netz durchlassen.

0
martin7812  02.06.2015, 14:53
@martin7812

Nachtrag:

Für "jsonp" ist es notwendig, ein Skript auf einem Webserver derselben Domain liegen zu haben. Um per "jsonp" auf den Drucker zuzugreifen, muss also ein Skript auf einem Webserver liegen, der dieselbe IP-Adresse (i.d.R. haben Hosts im lokalen Heimnetzwerk keinen Domainnamen!) wie der Drucker hat!

"jsonp" würde also auch nicht funktionieren.

Um wie C++ auf Systemfunktionen (z.B. DLLs) zuzugreifen, muss meine JavaScript-Implementierung dies unterstützen. Die gängigen Webbrowser tun dies nicht.

Mit einem JavaScript-Programm, das in einem Webbrowser läuft, kann ich also nicht jede beliebige Betriebssystem-Routine ansprechen.

(Mit einem browserunabhängigen JavaScript-Interpreter wäre dies wahrscheinlich möglich.)

0
hashpipeotto  02.06.2015, 15:01
@martin7812

also in dem thread schreibt jemand das man die bereits oben genannte ipp library auch clientseitig verwenden könnte, und somit ein printjob senden kann aus dem browser heraus, und zwar über moztcpsocket statt über das native http modul das nur serverseitig funktioniert.... https://github.com/williamkapke/ipp/issues/3

0
martin7812  02.06.2015, 19:18
@hashpipeotto

Sofern ich richtig verstanden habe, funktioniert das IPP Modul wahlweise mit Node.js oder mit mozTCPSocket.

Node.js ist eine JavaScript-Variante für die Kommandozeile und Webserver etc. und ist in keinem Browser integriert.

mozTCPSocket ist eine Mozilla-Erweiterung (würde also nicht mit IE funktionieren), die nur mit "certified applications" zusammenarbeitet (gerade um eben zu verhindern, dass irgendwer damit Unsinn anstellt). Man muss also zumindest ein Zertifikat im Firefox installieren, um dieses Modul auf einer HTML-Seite verwenden zu können.

Wir werden den Fragesteller fragen müssen, was er denn genau vor hat, zu tun und welchen Drucker er hat.

Wenn er ein Firefox-PlugIn schreiben will oder mit Node.js arbeitet, kann er prinzipiell TCP-Verbindungen aufbauen und/oder das IPP-Modul verwenden.

Das würde ihm aber nichts nutzen, wenn sein Drucker kein IPP hat.

Wenn er von einer normalen Webseite aus drucken will, ohne dass seine Leser zuvor ein Zertifikat im Firefox installieren müssen, sehe ich schwarz.

0

Denke nicht, dass das geht! Wäre nämlich Sicherheitstechnisch absolut dumm.

Woher ich das weiß:Studium / Ausbildung – Informatikstudium
hashpipeotto  02.06.2015, 02:35

das ist problemlos möglich, und zwar seit ca 5000 jahren, lebst du noch in der steinzeit?.... :D  kannst sogar von daheim ein printjob durchs internet senden an einen drucker der in mombasa steht :D

0
triopasi  02.06.2015, 11:15

Wenn das über JS geht ist das peinlich. Dann druck ich bei jedem der meine Website öffnet mal schnell 1000 Seiten xD

1
martin7812  02.06.2015, 11:53

Wenn es überhaupt geht, dann nur, wenn die entsprechende Webseite im lokalen Browser als "vertrauenswürdig" angegeben ist.

Ich kenne einen ähnlichen Mechanismus bei Java-Applets: Diese haben nur dann Zugriff auf Dateien, wenn sie signiert sind und die Signatur im Webbrowser als vertrauenswürdig eingestuft ist.

0

Ich nutze Clientseitiges JS da ich keine ahnung von HTML habe.