微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

node.js – 电子中的静音打印

我目前正在构建一个电子应用程序.我在我的本地文件系统上有一个PDF,我需要静打印出来(在认打印机上).我遇到了节点打印机库,但它似乎对我不起作用.有没有简单的解决方案来实现这一目标?

解决方法

首先,几乎不可能理解“静音”印刷的含义.因为一旦您向系统打印机发送打印指令,根本不会保持沉.在 Windows上,例如,一旦给出订单,至少系统托盘图标将指示正在发生的事情.也就是说,用电子打印有很好的描述功能,即使是“静音”也是其中之一:

如果您不想使用认打印机,则需要获得all system printers

contents.getPrinters()

这将返回一个PrinterInfo []对象.

以下是该对象从electron PrtinerInfo Docs开始的示例:

{
  name: 'Zebra_LP2844',description: 'Zebra LP2844',status: 3,isDefault: false,options: {
    copies: '1','device-uri': 'usb://Zebra/LP2844?location=14200000',finishings: '3','job-cancel-after': '10800','job-hold-until': 'no-hold','job-priority': '50','job-sheets': 'none,none','marker-change-time': '0','number-up': '1','printer-commands': 'none','printer-info': 'Zebra LP2844','printer-is-accepting-jobs': 'true','printer-is-shared': 'true','printer-location': '','printer-make-and-model': 'Zebra EPL2 Label Printer','printer-state': '3','printer-state-change-time': '1484872644','printer-state-reasons': 'offline-report','printer-type': '36932','printer-uri-supported': 'ipp://localhost/printers/Zebra_LP2844',system_driverinfo: 'Z'
  }
}

要打印文件,您可以使用它

contents.print([options])

这些选项在docs for contents.print()中描述:

> options对象(可选):
> silent Boolean(可选) – 不要询问用户打印设置.认值为false.
> printBackground布尔值(可选) – 还打印网页的背景颜色和图像.认值为false.
> deviceName String(可选) – 设置要使用的打印机设备名称.认为”.

打印窗口的网页.当silent设置为true时,如果deviceName为空并且打印的认设置为Electron,则Electron将选择系统的认打印机.

在网页中调用window.print()等同于调用webContents.print({silent:false,printBackground:false,deviceName:”}).

使用page-break-before:always;强制打印到新页面的CSS样式.

因此,您只需将PDF加载到隐藏窗口中,然后在标记设置为静音的情况下触发在电子中实现的打印方法.

// In the main process.
const {app,browserWindow} = require('electron');
let win = null;

app.on('ready',() => {
  // Create window
  win = new browserWindow({width: 800,height: 600,show: false });
  // Could be redundant,try if you need this.
  win.once('ready-to-show',() => win.hide())
  // load PDF.
  win.loadURL(`file://directory/to/pdf/document.pdf`);
 // if pdf is loaded start printing.
  win.webContents.on('did-finish-load',() => {
    win.webContents.print({silent: true});
    // close window after print order.
    win = null;
  });
});

但是,请允许我给你一点警告:
一旦你开始打印它就会变得令人沮丧,因为那里有驱动程序会以稍微不同的方式解释数据.这意味着可以忽略边际等等.由于您已经拥有PDF,因此很可能不会发生此问题.但是如果你想使用this method for example contents.printToPDF(选项,回调),请记住这一点.该项目表示,有很多选项可以避免像使用此问题中描述的预定义样式表一样受挫:Print: How to stick footer on every page to the bottom?

如果你想搜索电子中的特征并且你不知道它们可以隐藏在哪里,你所要做的就是去“所有”文档并使用你的搜索功能https://electron.atom.io/docs/all/

问候,Megajin

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐