- Insertar en la cabecera del sitio dentro del
<head>
el siguiente script: <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/esc-pos-encoder.js"></script>
- Luego crear una función que imprima el ticket con QR de la siguiente manera:
function ImprimeTicketConQR() {
const img = new Image();
const encoder = new EscPosEncoder();
return new Promise((resolve, reject) => {
img.src='./Factu Online_files/QR2300005.jpg';
img.onload = () => {
const result = encoder
.text('Mi ticket')
.newline()
.bold(true)
.text('manzana x1 = $100')
.bold(false)
.newline()
.text('===============================')
.newline()
.align('center')
.text('TOTAL: $100')
.newline()
.align('left')
.text('===============================')
.newline()
.align('center')
.image(img, 128, 128)
.encode();
const textEncoded = String.fromCharCode.apply(null, result);
const base64 = window.btoa(textEncoded)
return resolve(base64);
};
});
}
- Debe crearse una instancia del
EscPosEncoder
y de un Image
como aparece en el ejemplo.
- Los textos deben ser reemplazados según sus requerimientos
- La función retornará una promesa que sera resuelta una vez que la imagen se haya cargado mediante el callback
onload
como lo demuestra el ejemplo y el ticket se haya encodificado, primero como string y luego en base64, estos pasos son importantes pues de lo contrario no se mostrará ni el texto ni las imágenes.
img.src
debe apuntar a la imágen con el código QR
- Las imagenes tanto como el texto tienen un formato particular, para adecuarlo a sus necesidades (texto en negrita, alineación, tamaño de la imagen, etc... ir al sitio de la documentación.
- A direferencia de como ocurria anteriormente la funcion
BtPrint
solo modificará el window.location.href
una vez que se resuelva la promesa de ImprimeTicketConQR
(o como desee llamar a la función), es decir asincrónicamente.
function BtPrint(prn) {
ImprimeTicketConQR().then((result) => {
window.location.href = `intent:base64,${result}#Intent;scheme=rawbt;package=ru.a402d.rawbtprinter;end;`;
});
}
- el
then
retornara el codigo en base64 que debe ser insertado luego del intent
como lo demuestra el ejemplo utilizando interpolacion de strings.