javascript - Electron tulosta ilman valintaikkunaa (hiljainen tulostus)


Minun tarvitsee vain käyttää Electron.js:ää rakentaakseni työpöytäsovellukseni, käytän yksinkertaista BrowserWindowia ladatakseni verkkosivustoni sovelluksessa.

Lisäsin toiminnallisuutta, joka lataa ikkunan uudelleen, kun yhteysongelmia ilmenee, jotta kun internet taas kytketään päälle, sovellus lataa sivun uudelleen eikä näytä 'Sivua ei löytynyt'.

Verkkosivullani se vastaanottaa tilauksia ja tulostaa ne kuittitulostimeen, en halua, että tulostusikkuna tulee näkyviin, onko olemassa ratkaisua kuitin hiljaiseen tulostamiseen?

Tiedän tavan, miten tulostaa sen hiljaisesti Firefoxilla, mutta minun täytyy käyttää sitä nyt Electron-sovelluksessani.

koodini:

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()
  }
})

Vastaus #1

On olemassa silent-vaihtoehto BrowserWindow.webContents.print-metodille:

Tulostaa ikkunan verkkosivun. Kun silent on asetettu arvoon true, Electron valitsee järjestelmän oletustulostimen, jos deviceName on tyhjä, sekä käytetään oletusasetuksia tulostamiseen.

Web-sivulla kutsuminen window.print() on yhtä kuin kutsuminen webContents.print({silent: false, printBackground: false, deviceName: ''}).

let win = new BrowserWindow(params);

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

Vastaus #2

En tiedä, auttaako tämä sinun erityistilanteessasi, mutta törmäsin ongelmaan, jossa minun piti tulostaa raakaa tekstiä pistematrisetulostimelle muutaman komentokoodin kera (Epson ESC/P) Electron-sovelluksesta, joka ajetaan Windowsissa. Lopulta tein niin, että kirjoitin tavallisen tekstin komentokoodeineen .txt-tiedostoon ja sitten annoin tiedoston Windowsin 'print'-komennolle. Se tulostaa hiljaisesti ja toimii loistavasti. Ainoa ongelma, joka sinulla saattaa olla, on se, että se syöttää loput sivusta ulos työn jälkeen, vaikka en tiedä, tekisikö kuittitulostin saman asian. Tässä on käyttämäni koodi:

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 + '"');

'printer'-muuttuja voi olla joko lpt1/lpt2 tai verkkotulostimen jako. Katso tulostuskomennon viite täältä:

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

En ole kokeillut sitä, mutta olen varma, että jotain vastaavaa voidaan järjestää Macille/Linuxille käyttämällä lpr-komentoa.

Joka tapauksessa, toivottavasti tästä on apua jollekulle. Käytin päivän yrittäen löytää nativi Electron-tavan tulostaa meidän vanhalla pistekirjoituslaitteella käyttäen tulostimien sisäänrakennettuja fontteja, ja kävi ilmi, että pelkkä yksinkertaisen Windows-komennon antaminen riitti.