无对话框电子打印(静音打印)

问题描述 投票:0回答:3

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

我添加了一些功能,可以在连接问题时重新加载窗口,这样当互联网再次打开时,应用程序将重新加载页面,这样就不会显示“找不到页面”。

在我的网页中收到订单并将其打印到收据打印机,我不希望显示打印对话框,有什么解决方案可以静默打印收据吗?

我知道如何用 Firefox 打印它,但我现在需要在我的电子应用程序中使用它。

我的代码:

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

javascript printing electron receipt
3个回答
3
投票

silent
BrowserWindow.webContents.print
选项:

打印窗口的网页。当

silent
设置为
true
时,如果
deviceName
为空,Electron 将选择系统默认打印机并使用默认设置进行打印。

在网页中调用

window.print()
相当于调用
webContents.print({silent: false, printBackground: false, deviceName: ''})

let win = new BrowserWindow(params);

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

2
投票

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

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

“打印机”变量可以是 lpt1/lpt2 或网络打印机共享。 请参阅此处的打印命令参考:

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

我还没有尝试过,但我确信可以使用 lpr 命令为 Mac/Linux 解决类似的问题。

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


0
投票

对于任何正在寻找: 如果您想将打印件发送到特定打印机,而不是默认打印机,并静默打印

BrowserWindow.webContents
还包含其他方法,如
.getPrintersAsync()
方法。这可以通过 PrinterInfo[] 解决,因此您可以将系统中所有可用的打印机收集到一个数组中。该数组的每个对象都包含打印机的 name,您可以稍后在
.print()
方法的选项中使用它。

const mainWindow = new BrowserWindow(params);

const availablePrinters = await mainWindow.webContents.getPrintersAsync();

mainWindow.webContents.print({silent: true, deviceName: availablePrinters[0].name});

顺便说一句,有很多选项,比如pageSize、pagesPerSheet、dpi、等,但是Electron的文档相当不错,值得查看一下。

© www.soinside.com 2019 - 2024. All rights reserved.