2009-06-03 7 views
11

Ein Kollege und ich diskutierten darüber, was im Browser möglich ist und was nicht.Automatisch Bild von der Website drucken

Dann kam eine Frage auf, die keiner von uns mit Sicherheit beantworten konnte.

Sie können eine Webseite so erstellen, dass sie beim Navigieren zu diesem den Client-seitigen Drucker aktiviert und versucht, ein Dokument zu drucken. Zum Beispiel, wenn Sie meine persönliche Website besuchen, werden Sie mit einem Ausdruck von einem Bild von mir behandelt, lächelnd.

Nun, das ist eine scheußliche Idee. Es ist mir bewusst. Aber die Diskussion faszinierte mich, ob und wie es gemacht werden könnte. Mein Freund bestand darauf, dass das Beste, was Sie tun konnten, war, den Druckdialog für den Benutzer zu öffnen, sie müssten sich selbst drucken.

Wäre es möglich, diesen Schritt zu umgehen? Oder einfach nur ein schickes Skript, um die Maus über den Druckknopf zu bewegen und darauf zu klicken? Oder verwenden Sie ein ActiveX-Steuerelement, um direkt mit einer Drucker-API zu interagieren?

+1

Sie können einen Ausdruck senden, ohne ein Druckdialogfeld anzuzeigen. Leider konnte dies nur für IE. Hoffe das hilft ein bisschen: http://stackoverflow.com/questions/1096862/print-directly-from-browser-without-print-popup-window –

Antwort

5

Sie müssen den Benutzer auffordern, die aktuelle Seite zu drucken, es gibt keine Möglichkeit, diesen Schritt zu umgehen (möglicherweise in ActiveX für IE). Das heißt, es gibt zwei verschiedene Möglichkeiten, wie Sie den Benutzer auffordern können, Bilder von Ihnen zu drucken, wenn Sie die Seite laden.

So geht's in JavaScript.

window.onload = function() { 
    var img = window.open("me-smiling.png"); 
    img.print(); 
} 

Und hier ist, wie es in CSS/JavaScript/HTML zu tun (vorausgesetzt, Ihr Bild hat die id 'me-Lächeln'): CSS:

@media print { 
    * { 
    display:none; 
    } 
    img#me-smiling { 
    display:block; 
    } 
} 

Javascript:

window.onload = function() { window.print() } 
+1

Gibt es eine Möglichkeit, zwei Daumen hoch zu haben? – DevinB

+10

Nein, Browser unterstützen nicht das Drucken von Bildern mit zwei Daumen hoch (IE unterstützt einen Daumen hoch) – tj111

1

Sie können den Druckdialog, soweit ich weiß, nicht umgehen. Das wäre ein ziemlich offensichtlicher Sicherheitsfehler, wenn der Browser das erlaubt. Sie können jedoch den Druckdialog mit "window.print()" aufrufen.

+3

Nur weil es "eine Sicherheitslücke" wäre, heißt das nicht Es ist nicht schon ein Sicherheitsfehler. – DevinB

+0

Ich bin schon einmal auf diese Anforderung gestoßen. Es war Essensbestellungen automatisch in einem Hot Food Delivery Service von Online-Bestellungen zu drucken. Sie wollten nur, dass der Auftrag auf dem Papier erscheint und nicht bestätigt werden muss. Die neue Reihe von "Cloud-Druckern", die ich in letzter Zeit gesehen habe, bietet diese Business-Einrichtung, umgeht aber den Browser. – Jason

1

Ich denke, im besten Fall würden Sie eine ActiveX-Komponente benötigen, die die Basis-Windows-API verwendet, um einen Gerätekontext für den Standarddrucker zu erhalten und ein eingebettetes Bild unter Verwendung angenommener Werte für zu drucken die Druckereinstellungen.

4

AttendStar hat ein kostenloses Add-on erstellt, das das Dialogfeld unterdrückt und alle Kopf- und Fußzeilen für die meisten Firefox-Versionen entfernt. .

https://addons.mozilla.org/en-US/firefox/addon/attendprint/

Mit diesem Merkmal auf Sie $ ('img') jqprint() verwenden können; und jqprint für jquery druckt nur das Bild, das automatisch von Ihrer Webanwendung aufgerufen wird.

+0

Das ist nicht nur wirklich interessant, es zeigt auch, dass es tatsächlich einen Geschäftsfall für das gibt, nach dem ich gefragt habe. Etwas, von dem ich zu der Zeit keine Ahnung hatte. – DevinB

1

auf den Standarddrucker ohne zu sehen, eine Druckdialogaufforderung automatisch zu drucken, habe ich einige Codes in der folgenden Frage geteilt, die in IE7, IE8 und IE9 funktioniert:

Bypass Printdialog in IE9

6

Die einzige Lösung Vermeiden Sie den Druckdialog, bei dem ich festgestellt habe, dass eine Variable in Mozilla Firefox erstellt wurde, um den automatischen Ausdruck festzulegen.Vielleicht ist nicht die beste Lösung, wenn Sie andere Browser verwenden müssen, aber in meinem Fall muss ich nur einen Bericht automatisch drucken und es funktioniert:

1 Öffnen Sie Firefox und geben Sie "about: config" in der Adressleiste ein
2- Rechts auf jede Präferenz klicken und wählen Sie "Neu"> "Boolean"
3- eine Variable hinzufügen "print.always_print_silent" mit "wahren" Wert
4- Restart Firefox aufgerufen.

Hoffen Sie, dass Sie helfen!

+0

Das hat funktioniert. Vielen Dank. :-) –

1

So weit ich weiß, gibt es keine Möglichkeit, ein Dokument direkt zu drucken, ohne dass ein Client eingreifen muss, wie das Setzen von Browser-Flags. In unserem aktuellen Projekt müssen wir direkt auf dem Standarddrucker drucken, aber zumindest mit Chrome können Sie es leicht mit zusätzlichen Startargumente tun.

Um direkt mit dem OS-Standarddrucker drucken Sie verwenden können: statt chromes Druckvorschau

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:\tmp --kiosk-printing http://www.contoso.com

Eine weitere Option, die auch nützlich sein kann, ist tos die native Druckdialog verwenden.

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:\tmp --disable-print-preview http://www.contoso.com

Hinweis, dass window.print() und/oder Strg-P ​​entsprechend den genannten Einstellungen verhalten.

Ich weiß, dass dies nicht genau die OP-Frage beantwortet, aber ich denke, dass es etwas verwandt ist, und für Web-basierte Unternehmensanwendungen ist dies ein ziemlich häufiger Anwendungsfall. Vielleicht findet es jemand nützlich.

Für Firefox empfehle ich Seamless Print Addon

0

Von vieler Suche von den letzten paar Tagen, Ich habe eine bestmögliche Lösung gefunden. Bis zum Datum Chrome unterstützt das direkte Drucken von JavaScript nicht. Es hat USB und serielle API gestartet, die helfen könnten.

Aber derzeit verwende ich eine JavaApplet-Lösung, die Open Source ist. https://github.com/qzind/qz-print - build Während ich Fehler beim Aufbau bekomme. Ich bevorzugte eine Prebuilt - QZ Print Plugin 1.9.3 Desktop-App, die gut funktioniert.

Herunterladen von hier: https://qz.io/download/

Codebeispiel:

/*************************************************************************** 
* Prototype function for printing an HTML screenshot of the existing page 
* Usage: (identical to appendImage(), but uses html2canvas for png rendering) 
* qz.setPaperSize("8.5in", "11.0in"); // US Letter 
* qz.setAutoSize(true); 
* qz.appendImage($("canvas")[0].toDataURL('image/png')); 
***************************************************************************/ 
function printHTML5Page() { 
    $("#qz-status").html2canvas({ 
     canvas: hidden_screenshot, 
     onrendered: function() { 
      if (notReady()) { return; } 
      // Optional, set up custom page size. These only work for PostScript printing. 
      // setPaperSize() must be called before setAutoSize(), setOrientation(), etc. 
      qz.setPaperSize("8.5in", "11.0in"); // US Letter 
      qz.setAutoSize(true); 
      qz.appendImage($("canvas")[0].toDataURL('image/png')); 

      //qz.setCopies(3); 
      qz.setCopies(parseInt(document.getElementById("copies").value)); 

      // Automatically gets called when "qz.appendFile()" is finished. 
      window['qzDoneAppending'] = function() { 
       // Tell the applet to print. 
       qz.printPS(); 

       // Remove reference to this function 
       window['qzDoneAppending'] = null; 
      }; 
     } 
    }); 
} 

Komplettes Beispiel finden Sie hier: https://gist.github.com/bkrajendra/c80de17b627e59287f7c

0

Dies ist die beste Lösung, die ich für firefox gefunden: Es gibt dieses tolle Add-on Seamless Print.

Es funktioniert wie Charme.

+0

Keine ideale Antwort. Bitte lesen Sie die Antwortleitfäden unter https://stackoverflow.com/help/how-to-answer –

+0

Dank @AmitP. Ich werde mich verbessern. – Josiah

Verwandte Themen