从电子申请打印

lea*_*ero 15 javascript printing node.js electron

我正在尝试从电子应用程序中使用节点打印机,但是一旦我添加了使用打印机的行,应用程序就崩溃了.

控制台输出: __CODE__

这是我正在运行的应用程序.我只在电子文档中提供的简单应用示例中添加了打印行:

[1]    9860 segmentation fault (core dumped)  node_modules/electron-prebuilt/dist/electron.
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?我自己尝试了节点打印机,并成功打印了一些乱码文本.

Yan*_*oto 9

node-printer使用本机绑定并根据文档:

Electron支持本机节点模块,但由于Electron使用的是官方节点不同的V8版本,因此在构建本机模块时必须手动指定Electron标头的位置.

我想这就是为什么你得到了seg fault.尝试针对电子标题构建模块,如文档中所述:

npm install --save-dev electron-rebuild

# Every time you run npm install, run this too
./node_modules/.bin/electron-rebuild
Run Code Online (Sandbox Code Playgroud)


jus*_*ase 5

node-printer模块中有 C++ 代码。这意味着您必须使用与电子使用的节点版本相同的节点来编译它。这实际上是可行的,但它非常复杂。

另一方面,Electron 已经有打印 API 了:

https://electronjs.org/docs/api/web-contents#contentsprintoptions-callback

如果这个 api 不够用,而你仍然想利用该node-printer模块,请告诉我,我将编辑此响应,并提供有关如何分叉和修复node-printer以使其与电子兼容的更长答案。

  • 传说中的胡子顺便说一句 (2认同)

小智 5

app.on('ready', () => {

let win = new BrowserWindow({width:800, height:600,resizable:false})
win.loadURL('file://'+__dirname+'/index.html')
win.webContents.on('did-finish-load', () => {
    win.webContents.printToPDF({ marginsType:2, pageSize:"A3", landscape:false }, (error, data) => {
        if (error) throw error
        fs.writeFile('output.pdf', data, (error) => {

        //getTitle of Window
        console.log(win.webContents.getTitle())

        //Silent Print 

        if (error) throw error
        console.log('Write PDF successfully.')
        })
    })
})
Run Code Online (Sandbox Code Playgroud)

否则您也可以使用以下行

win.webContents.print({silent:true, printBackground:true})
Run Code Online (Sandbox Code Playgroud)