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
silenteste setat petrue, Electron va alege imprimanta implicită a sistemului dacădeviceNameeste gol și setările implicite pentru imprimare.Apelarea
window.print()pe o pagină web echivalează cu apelareawebContents.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.
