Skip to content

Instantly share code, notes, and snippets.

@maggiben
Last active November 30, 2021 14:24
Show Gist options
  • Save maggiben/90913ab2fc5f63ae90aa6b194c52ca9c to your computer and use it in GitHub Desktop.
Save maggiben/90913ab2fc5f63ae90aa6b194c52ca9c to your computer and use it in GitHub Desktop.
Imprimiento tickets con código QR
  1. Insertar en la cabecera del sitio dentro del <head> el siguiente script: <script src="https://cdn.jsdelivr.net/npm/esc-pos-encoder@1.3.0/dist/esc-pos-encoder.js"></script>
  2. 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);
      };
  });
}
  1. Debe crearse una instancia del EscPosEncoder y de un Image como aparece en el ejemplo.
  2. Los textos deben ser reemplazados según sus requerimientos
  3. 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.
  4. img.src debe apuntar a la imágen con el código QR
  5. 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.
  6. 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;`;
  });
}
  1. el then retornara el codigo en base64 que debe ser insertado luego del intent como lo demuestra el ejemplo utilizando interpolacion de strings.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment