Creé en la API de NodeJS, a la que llamo al hacer clic en un botón en la aplicación angular.
Desea imprimir recibos de compra al hacer clic en un botón, a través de una impresora térmica . Sin ninguna ventana emergente de diálogo para guardar o imprimir PDF, directamente debería imprimirse.
Probé este código nodeJS pero parece que funciona para la aplicación de escritorio y no para la web. Tengo código UI y BE en diferentes repositorios de código base.
Intento este código:
'use strict'; const { PosPrinter } = require("electron-pos-printer"); class SeriesPrinter { constructor() { } printSr() { console.log("Inside print function"); const print_data = [ { type: 'text', value: 'Sample text', style: 'text-align:center;font-weight: bold' }, { type: 'text', value: 'Another text', style: 'color: #fff' }, ]; // returns promise<any> PosPrinter.print(print_data, { printerName: 'POS-80C', preview: false, width: '170px', // width of content body margin: '0 0 0 0', // margin of content body copies: 1, // The number of copies to print }) .then(() => { // some code ... }) .catch((error) => { console.error(error); }); } } module.exports = SeriesPrinter;está arrojando un error:
Inside print function TypeError: BrowserWindow is not a constructor \node_modules\electron-pos-printer\dist\post-printer.js:87:30 at new Promise (<anonymous>) \node_modules\electron-pos-pCualquier idea para solucionar esta o cualquier otra solución (en el lado de la interfaz de usuario o en el lado de nodeJS funcionará, debería imprimirse en silencio)
Obtiene TypeError: BrowserWindow no es un constructor porque lo está usando en un entorno sin electrones (navegador).
Lo que haría desde que mencionaste Angular:
El servicio se vería así:
export class PrintService { isPrinting = false; constructor(private router: Router) { } printDocument(documentName: string, documentData: string[]) { this.isPrinting = true; this.router.navigate(['/', { outlets: { 'print': ['print', documentName, documentData.join()] }}]); } onDataReady() { setTimeout(() => { window.print(); this.isPrinting = false; this.router.navigate([{ outlets: { print: null }}]); }); } }y lo usaría en un componente como InvoiceComponent:
ngOnInit() { this.invoiceDetails = this.invoiceIds .map(id => this.getInvoiceDetails(id)); Promise.all(this.invoiceDetails) .then(() => this.printService.onDataReady()); }En HTML
<button (click)="onPrint()">Print</button>En TS
onPrint(){ window.print(); }HTML
<div id="printSectionId" > ....... <button (click)="printToCart('printSectionId')" class="button">Print</button> ... </div>TS
export class Component{ constructor(){} printToCart(printSectionId: string){ let popupWinindow let innerContents = document.getElementById(printSectionId).innerHTML; popupWinindow = window.open('', '_blank', 'width=600,height=700,scrollbars=no,menubar=no,toolbar=no,location=no,status=no,titlebar=no'); popupWinindow.document.open(); popupWinindow.document.write('<html><head><link rel="stylesheet" type="text/css" href="style.css" /></head><body onload="window.print()">' + innerContents + '</html>'); popupWinindow.document.close(); } }