@runfoodapp/template-based-document-generator
v0.1.1
Published
Sitio diseñado para trabajar dentro de un `iframe` que recibe plantillas y datos, las procesa y las convierte a imagen o comandos POS
Downloads
8
Maintainers
Readme
@runfoodapp/template-based-document-generator
Este proyecto permite generar un documento como HTML, como imagen o como POS Commands (en lenguajeS epson
tanca
star
daruma
)
Este proyecto está diseñado para ejecutarse dentro de un iframe. Se interactura con el iframe a traves de mensajes.
Formato del mensaje
Se presta la idea de action
(redux):
interface Action{
"type": string,
"payload": any | null | undefined,
"source": "@runfoodapp/template-based-document-generator",
"threadId" : string | undefined
}
Acciones disponibles:
| Dirección | tipo de acción (type) | carga (payload) | |---:|---|---| | Salida | READY | | | Entrada | RENDER | RenderDocumentPayload | | Salida | RENDER.COMPLETED | RenderDocumentCompletedPayload | | Salida | RENDER.FAILED | Error | | Entrada | TO_POS_COMMANDS | POSCommandsPayload | | Salida | TO_POS_COMMANDS.COMPLETED | Buffer | | Salida | TO_POS_COMMANDS.FAILED | Error | | Entrada | TO_B64IMG | { grayscale?: boolean } | null | | Salida | TO_B64IMG.COMPLETED | Buffer | | Salida | TO_B64IMG.FAILED | Error |
tipos de datos:
interface RenderDocumentPayload {
/** Titulo del documento HTML **/
title: string
/** ancho máximo del documento (en `px`) **/
width: string
/** Cuando se ejecute window.print() establece la escala de impresión (zoom-in o zoom-out) **/
htmlPrintScale?: string | number,
/** Tamaño base de los textos (las demás etiquetas de texto se ajustarán basados en este tamaño base) **/
fontSize: string
/** plantilla (compatible con `handlebars`) **/
content_template: string
/** Datos a utilizar junto con la plantilla para generar el documento **/
data: Object
}
interface RenderDocumentCompletedPayload {
/** texto HTML de plantilla generada **/
content: string
/** texto HTML del documento completo generado (`document.documentElement.innerHTML`) **/
html: string
/** ancho total del documento en pixeles (`document.documentElement.offsetWidth`) **/
width: number
/** alto total del documento en pixeles (`document.documentElement.offsetHeight`) **/
height: number
}
interface Error {
message : string,
name : string,
code : string | number
}
interface POSCommandsPayload {
/** Lenguaje de comandos **/
pos_lang: "epson" | "tanca" | "star" | "daruma"
/** Si se agrega o no el comando de cortar papel **/
cut?: boolean
/** Contiene 2 numeros, el primero es el número de sonidos, y el segundo la duración de cada sonido (en ms) **/
beep?: [number, number]
/** Si se debe agregar el comando de abrir cajón de monedas al inicio **/
cash_drawer?: boolean;
}
FIXME:
[ ] Para que el proyecto sea compatible con es3
necesitas quitar el uso de object-spread (var a = { ...b }
) en la dependencia node-thermal-printer
.
[ ] La dependencia node-thermal-printer
no tiene mucha sensibilidad a los grises, practicamente los ignora al momento de traducir la imagen. Sin embargo otras librerías procesan correctamente las imagenes (vease: Solución de ESCPOS-ThermalPrinter-Android en JAVA)