Featured image of post electron中调用打印机静默打印

electron中调用打印机静默打印

在ipc主进程中注册监听获取打印机列表请求

1
2
3
ipcMain.on('getPrinterList', event => {
mainWindow.webContents.send('getPrinterList',mainWindow.webContents.getPrinters())
})

在ipc主进程中注册监听打印请求

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
ipcMain.on('print-html', (event, htmlContent) => {
  const printWindow = new BrowserWindow({ show: false });
  printWindow.loadURL(`data:text/html;charset=utf-8,${encodeURI(htmlContent)}`);

  printWindow.webContents.on('did-finish-load', () => {
    const options = {
      silent: true,
      printBackground: true,
      pageSize: { width: 100000, height: 145000 }, // 100mm * 150mm in microns
      landscape: false,
      margins: {
        marginType: 'none'
      }
    };
    printWindow.webContents.print(options, (success, errorType) => {
      if (!success) console.log(errorType);
      printWindow.close();
    });
  });
});

子页面 引入

1
const { ipcRenderer } = require('electron')

子页面获取打印机方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
ipcRenderer.send('getPrinterList')
// 监听主线程获取到打印机列表后的回调
ipcRenderer.once('getPrinterList', (event, data) => {
    // data就是打印机列表
    for (var i = 0; i < data.length; i++) {
        this.printerSelection.push(data[i])
        // 设置默认打印机 并获取打印机名称
        if (data[i].isDefault) {
            this.printerName = data[i].name
        }
    }
})

子页面发送也打印请求

1
ipcRenderer.send('print-html', pdfhtml);

其中pdfhtml为使用hiprint插件 生成的html面单模版 再由程序替换相关变量生成对应code128等 进行输出打印

http://hiprint.io/

使用 Hugo 构建
主题 StackJimmy 设计