无对话的电子打印(无声打印)

Electron print without dialog (silent print)

我只需要使用 electron js 来构建我的桌面应用程序,我使用简单的 BrowserWindow 在应用程序中加载我的网站。

我添加了一些功能以在连接出现问题时重新加载 window,因此当互联网再次打开时,应用程序将重新加载页面,因此它不会显示 "Page not found"。

在我的网页中它收到了一个订单并打印到收据打印机,我不想显示打印对话框,有什么解决方案可以静默打印收据吗?

我知道如何使用 firefox 静默打印它,但我现在需要在我的 electron 应用程序中使用它。

我的代码:

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

silent选项BrowserWindow.webContents.print:

Prints window’s web page. When silent is set to true, Electron will pick the system’s default printer if deviceName is empty and the default settings for printing.

Calling window.print() in web page is equivalent to calling webContents.print({silent: false, printBackground: false, deviceName: ''}).

let win = new BrowserWindow(params);

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

我不知道这是否对您的具体情况有帮助,但我 运行 遇到了一个问题,我需要将原始文本打印到点阵打印机并附上几个命令代码(Epson ESC/P) 来自 Electron 应用 运行 Windows。我最终做的是将纯文本连同命令代码写入 .txt 文件,然后将文件传递给 Windows 'print' 命令。它打印无声并且效果很好。您可能遇到的唯一问题是它会在作业完成后送出页面的其余部分,尽管我不知道收据打印机是否会做同样的事情。这是我使用的代码:

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' 变量可以是 lpt1/lpt2 或网络打印机共享。请在此处查看打印命令的参考:

https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/print

我还没有尝试过,但我确信可以使用 lpr 命令为 Mac/Linux 哈希出类似的东西。

无论如何,希望这对某人有所帮助。我花了一天的时间试图找到一种原生的 Electron 方式来使用打印机的内置字体打印到我们的旧点阵,结果我只需要发出一个简单的 Windows 命令就可以了。