javascript - Electron imprimare fără dialog (imprimare silențioasă)


Am nevoie doar să folosesc Electron JS pentru a construi aplicația mea de desktop, folosesc un BrowserWindow simplu pentru a încărca site-ul meu în aplicație.

Am adăugat o funcționalitate pentru a reîncărca fereastra când apar probleme de conexiune, astfel încât atunci când internetul se reaprinde, aplicația va reîncărca pagina și nu va afișa „Pagina nu a fost găsită”.

Pe pagina mea web a primit o comandă și o tipărește pe imprimanta de chitanțe, nu vreau ca dialogul de tipărire să apară, există vreo soluție pentru a tipări chitanța în mod silențios?

Știu cum să îl imprim silențios cu Firefox, dar trebuie să îl folosesc acum în aplicația mea Electron.

codul meu:

const electron = require('electron')
const app = electron.app
const BrowserWindow = electron.BrowserWindow

const path = require('path')
const url = require('url')

let mainWindow

function createWindow () {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    minWidth: 800,
    minHeight: 600,
    icon: __dirname + '/icon.ico'
  })

  mainWindow.loadURL(url.format({
    pathname: path.join(__dirname, 'index.html'),
    protocol: 'file:',
    slashes: true
  }))

  mainWindow.on('closed', function () {
    mainWindow = null
  })

}

app.on('ready', createWindow)

app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('activate', function () {
  if (mainWindow === null) {
    createWindow()
  }
})

Răspuns #1

Există opțiunea silent a BrowserWindow.webContents.print:

Printează pagina web a ferestrei. Când silent este setat pe true, Electron va alege imprimanta implicită a sistemului dacă deviceName este gol și setările implicite pentru imprimare.

Apelarea window.print() pe o pagină web echivalează cu apelarea webContents.print({silent: false, printBackground: false, deviceName: ''}).

let win = new BrowserWindow(params);

win.webContents.print({silent: true});

Răspunsul #2

Nu știu dacă acest lucru ajută în situația ta specifică, dar m-am confruntat cu o problemă în care trebuia să tipăresc text simplu la o imprimantă cu matrice de puncte cu câteva coduri de comandă atașate (Epson ESC/P) dintr-o aplicație Electron care rulează pe Windows. Ce am făcut în final a fost să scriu textul simplu împreună cu codurile de comandă într-un fișier .txt și apoi să trimit fișierul comenzii 'print' din Windows. Tipărește silențios și funcționează excelent. Singura problemă pe care ai putea să o ai este că imprimanta scoate restul paginii după finalizarea lucrării, deși nu știu dacă o imprimantă de chitanțe ar face același lucru. Iată codul pe care l-am folosit:

var fs = require('fs');
var printString = "whatever text you need to print with optional ascii commands";
var printer = "lpt1";

var tmpFileName ="c:\tmp.txt";
fs.writeFileSync(tmpFileName,printString,"utf8");

var child = require('child_process').exec;
child('print /d:' + printer + ' "' + tmpFileName + '"');

Variabila 'printer' poate fi fie lpt1/lpt2, fie o imprimantă partajată în rețea. Consultați referința pentru comanda de imprimare aici:

https://learn.microsoft.com/ro-ro/windows-server/administration/windows-commands/print

Nu am încercat, dar sunt sigur că ceva similar poate fi rezolvat pentru Mac/Linux folosind comanda lpr.

Oricum, sper că asta ajută pe cineva. Am petrecut o zi încercând să găsesc o metodă nativă Electron pentru a tipări la vechiul nostru imprimant cu matrice de puncte folosind fonturile încorporate ale imprimantelor, și se dovedește că doar să emit o comandă simplă Windows a fost tot ce a trebuit.