2009-06-03 33 views
11

Un collega e io stavamo discutendo di cosa è e non è possibile all'interno del browser.Stampa automatica immagine dal sito web

Poi è venuta una domanda che nessuno di noi avrebbe potuto rispondere con certezza.

È possibile creare una pagina Web in modo tale che quando si accede ad essa, impegna la stampante lato client e tenta di stampare un documento. Ad esempio, ogni volta che visiti il ​​mio sito web personale, ti verrà mostrata una copia di una mia foto, sorridendo.

Ora, questa è un'idea orribile. Sono consapevole. Ma la discussione mi ha incuriosito se si potesse fare, e come. Il mio amico ha insistito sul fatto che il meglio che potevi fare era aprire la finestra di dialogo di stampa per l'utente, che avrebbero dovuto fare clic sulla stampa.

Sarebbe possibile ignorare questo passaggio? O solo qualche script di fantasia per spostare il mouse sul pulsante di stampa e fare clic su di esso? Oppure utilizzare un controllo activeX per interfacciarsi direttamente con un'API della stampante?

+1

È possibile inviare una stampa senza mostrare una finestra di dialogo di stampa. Sfortunatamente, questo potrebbe essere solo per IE. Spero che questo aiuti un po ': http://stackoverflow.com/questions/1096862/print-directly-from-browser-without-print-popup-window –

risposta

5

È necessario richiedere all'utente di stampare la pagina corrente, non è possibile ignorare questo passaggio (possibilmente in activeX per IE). Detto questo, ci sono due modi diversi in cui puoi chiedere all'utente di stampare le immagini di te sorridenti quando la pagina viene caricata.

Ecco come farlo in JavaScript.

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

Ed ecco come farlo in CSS/JavaScript/HTML (supponendo che l'immagine ha il id 'me-sorridendo'): CSS:

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

Javascript:

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

Esiste un modo per avere anche due pollici in su? – DevinB

+10

No, i browser non supportano la stampa di immagini con due pollici in su (IE supporta un pollice in alto) – tj111

1

Non è possibile ignorare la finestra di dialogo di stampa, per quanto ne so. Sarebbe un difetto di sicurezza piuttosto ovvio se il browser lo permettesse. Ma puoi aprire la finestra di dialogo di stampa con "window.print()".

+3

Solo perché' sarebbe 'un difetto di sicurezza, non significa che non è già un difetto di sicurezza. – DevinB

+0

Ho già incontrato questo requisito prima. Era per stampare automaticamente gli ordini di cibo in un servizio di consegna di cibo caldo da ordini online. Volevano solo che l'ordine venisse pubblicato sulla carta e non dovessero essere riconosciuti. La nuova gamma di "cloud stampatori" che sto vedendo recentemente fornisce anche questa funzione aziendale, ma ignora il browser. – Jason

1

Penso che al meglio avresti bisogno di un componente ActiveX utilizzando l'API di Windows di base per ottenere un contesto di dispositivo per la stampante predefinita e provare e stampare un'immagine incorporata utilizzando i valori presunti per le impostazioni della stampante.

4

AttendStar ha creato un componente aggiuntivo gratuito che elimina la finestra di dialogo e rimuove tutte le intestazioni e i piè di pagina per la maggior parte delle versioni di Firefox. .

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

Con questa funzione abilitata è possibile usare $ ('img') jqprint(); e jqprint per jquery stamperà solo quell'immagine automaticamente chiamata dalla tua applicazione web.

+0

Non solo è davvero interessante, mostra che in realtà c'è un business case per quello che stavo chiedendo. Qualcosa di cui non avevo idea al momento. – DevinB

1

di stampare sulla stampante predefinita automaticamente senza vedere un prompt di dialogo di stampa, ho condiviso un po 'di codice nel seguente domanda che funziona in IE7, IE8 e IE9:

Bypass Printdialog in IE9

6

L'unica soluzione a evitare la finestra di dialogo di stampa che ho trovato stava creando una variabile su Mozilla Firefox per impostare la stampa automatica.Forse non è la soluzione migliore se hai bisogno di usare altri browser, ma nel mio caso, ho solo bisogno di stampare un report automaticamente e funziona:

1- Apri Firefox e digita "about: config" nella barra degli indirizzi
2- Fare clic con il pulsante destro del mouse su qualsiasi preferenza e selezionare "Nuovo"> "Booleano"
3- Aggiungere una variabile denominata "print.always_print_silent" con valore "true"
4- Riavviare Firefox.

Spero di aiutarti!

+0

Questo ha funzionato. Grazie. :-) –

1

Per quanto ne so, non c'è modo di stampare un documento direttamente, senza alcun intervento da parte del cliente, come l'impostazione di flag del browser. Nel nostro progetto attuale abbiamo bisogno di stampare direttamente sulla stampante predefinita, ma almeno con Chrome puoi farlo facilmente con argomenti di avvio aggiuntivi.

Per stampare direttamente alla stampante predefinita del sistema operativo è possibile utilizzare:

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

Un'altra opzione, che può anche essere utile, è tos utilizzare la finestra di stampa nativo invece di anteprima di stampa cromie.

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

nota, che window.print() e/o Ctrl-P si comportano di conseguenza le impostazioni menzionate.

Lo so, questo non risponde esattamente alla domanda dei PO, ma penso che sia in qualche modo correlato, e per le applicazioni aziendali basate sul web questo è un caso d'uso abbastanza comune. Forse qualcuno lo trova utile.

Per Firefox vi consiglio Seamless Print Addon

0

Da sacco di ricerca dalla ultimi giorni, Ho trovato una migliore soluzione possibile. Fino alla data di pubblicazione. Chrome non supporta la stampa diretta da javascript. Ha lanciato USB e API seriali che potrebbero aiutare.

Attualmente sto utilizzando una soluzione JavaApplet che è open source. https://github.com/qzind/qz-print - build Mentre ricevo errori nel costruirlo. Ho preferito l'app per desktop Prebuilt - QZ Print Plugin 1.9.3 , che funziona benissimo.

scaricarlo da qui: https://qz.io/download/

Esempio di codice:

/*************************************************************************** 
* 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; 
      }; 
     } 
    }); 
} 

Esempio completo può essere trovato qui: https://gist.github.com/bkrajendra/c80de17b627e59287f7c

0

Questa è la soluzione migliore che ho trovato per firefox: C'è questo fantastico componente aggiuntivo Seamless Print.

Funziona come un fascino.

+0

Non è una risposta ideale. Si prega di leggere le linee guida di risposta su https://stackoverflow.com/help/how-to-answer –

+0

Grazie a @AmitP. Migliorerò – Josiah

Problemi correlati