La mia ricerca approfondita sul web mi ha fornito un paio di idee, ma nessuna sembra funzionare correttamente nel mio particolare caso d'uso. Ecco cosa ho:JavaScript: invia testo non elaborato alla stampante - nessun server richiede/chiama metodo, in grado di funzionare offline, puramente clientide
1) stampante Zebra, che utilizza ZPL come linguaggio di stampa;
2) Una stringa in javascript che consiste di 3 moduli ZPL per la stampa di 3 etichette.
Il nostro ingegnere di sistema ha già verificato che la sintassi ZPL è corretta. Quello che sto cercando di ottenere è inviare la stringa come testo normale affinché la stampante possa accettarla come istruzioni ZPL per stampare etichette. Il migliore che ho elaborato finora assomiglia a questo:
var mywindow = window.open('', 'Printing', 'width=800,height=600');
//mywindow.write("testDirectWrite"); // not working
mywindow.document.open('text/plain');
////mywindow.document.write('<html><head><title>Printing</title><meta charset="ISO-8859-1">');
///*optional stylesheet*/ //mywindow.document.write('<link rel="stylesheet" href="main.css" type="text/css" />');
////mywindow.document.write('</head><body>');
var theDiv = $(".test-printirane-po-usb");
var printContents = theDiv[0].innerText;
mywindow.document.write(printContents);
////mywindow.document.write('</body></html>');
//mywindow.document.close(); // necessary for IE >= 10
//mywindow.focus(); // necessary for IE >= 10
//mywindow.print();
//mywindow.close();
Per ora (a scopo di test), theDiv è il contenitore in cui ho posto la stringa ZPL. Fondamentalmente, ho capito, che la soluzione migliore è aprire una nuova finestra popup, riempirla con la stringa ZPL e chiamare thePopupWindow.print(); L'utente seleziona quindi la stampante zebra e fa clic su "Stampa". Il problema: sembra che la stampante interpreta ciò che viene stampato come una pagina HTML (a causa delle
<html><head></head><body>theZPLString comes here</body></html>
tag, che vedo, quando ho ispezionare il popup in Chrome, per esempio) e stampa il Codice ZPL come testo normale, piuttosto che interpretarlo e stampare un'etichetta. Suppongo di aver bisogno di qualcosa come thePopupWindow.write() per evitare di scrivere sulla proprietà del documento della finestra, che ovviamente avvolge la stringa nel codice html. Per testarlo, utilizzo il driver Generico/Solo testo e salvo ciò che viene "stampato" in un file .txt.
In Chrome, ottengo un file vuoto.
In Mozilla, quando rimuovo questa riga: mywindow.document.open ('text/plain'); Ricevo lo ZPL come caratteri, uno per riga. Quando lo aggiungo, ottengo solo una data e un'ora, sempre un carattere per riga.
In IE - ho questa (con o senza mywindow.document.open ('text/plain');):
Page 1 o
^XA^PW400^LL37^
12.4.2016
ho trovato diverse soluzioni, ma coinvolgono utilizzando PHP, C#, anche java e non voglio che sia lato server, come menzionato nel titolo. Qualsiasi aiuto sarà apprezzato. @forgivenson, grazie per il punto. Dopo aver letto il tuo, ho visto la piccola 'x', che posso cliccare per cancellare il mio commento, così ho aggiunto il commento all'interno della domanda. Ho perso qualcosa di molto importante: la stampante è collegata tramite porta USB!
FYI, è possibile modificare la tua domanda per aggiungere queste informazioni. – forgivenson
Interessante domanda. Quando ho affrontato un problema simile, ho dovuto creare un applet Java firmato la cui unica funzione era quella di inviare byte alla porta della stampante. Un'altra opzione potrebbe essere quella di scrivere un'estensione specifica per il browser. Dubito che ci sia un modo per inviare byte direttamente alla stampante usando solo javascript, a causa di problemi di sicurezza. –
Vedete, il problema principale qui è che i comandi Zebra funzioneranno solo se è possibile inviare i byte non modificati direttamente alla porta della stampante; il browser non ti permetterà di farlo, sfortunatamente Avrai bisogno di un modo per ottenere tale accesso diretto, in un modo sarebbe attraverso un'estensione del browser, quindi avresti accesso meno limitato all'hardware; un'altra opzione sarebbe quella di utilizzare un applet Java o un'applicazione JNLP per fornire tale accesso. –