Javascript 从电子应用程序打印

Javascript 从电子应用程序打印,javascript,node.js,printing,electron,Javascript,Node.js,Printing,Electron,我正试图从一个电子应用程序中使用,但一旦我添加行以使用打印机,应用程序就会崩溃 控制台输出以下内容: [1] 9860 segmentation fault (core dumped) node_modules/electron-prebuilt/dist/electron. 这是我正在运行的应用程序: var app = require('app'); var BrowserWindow = require('browser-window'); var printer = requi

我正试图从一个电子应用程序中使用,但一旦我添加行以使用打印机,应用程序就会崩溃

控制台输出以下内容:

[1]    9860 segmentation fault (core dumped)  node_modules/electron-prebuilt/dist/electron.
这是我正在运行的应用程序:

var app = require('app');
var BrowserWindow = require('browser-window');
var printer = require('printer');

require('crash-reporter').start();

app.on('ready', function() {
  var mainWindow = new BrowserWindow({width: 800, height: 600});
  mainWindow.loadUrl('file://' + __dirname + '/app/index.html');

  mainWindow.openDevTools();

  printer.printDirect({data:"print from Node.JS buffer" // or simple String: "some text"
      , printer:'HP-Deskjet-F4400-series' // printer name, if missing then will print to default printer
      , type: 'TEXT' // type: RAW, TEXT, PDF, JPEG, .. depends on platform
      , success:function(jobID){
          console.log("sent to printer with ID: "+jobID);
      }
      , error:function(err){console.log(err);}
  });      
});
我错过什么了吗


我自己尝试了节点打印机,并成功地打印了一些乱七八糟的文本。

节点打印机使用本机绑定,并根据:

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

我想这就是为什么会出现
seg故障
。尝试根据文档中提到的electron标头构建模块:

npm install --save-dev electron-rebuild

# Every time you run npm install, run this too
./node_modules/.bin/electron-rebuild

<> >代码>节点打印机模块中有C++代码。这意味着您必须使用electron使用的相同版本的node来编译它。这实际上是可行的,但相当复杂

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

如果此api不够,并且您仍然希望利用
节点打印机
模块,请告诉我,我将用关于如何分叉和修复
节点打印机
的较长回答编辑此响应,以使其与电子兼容

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.')
      })
    })
  })
})
否则,您也可以使用以下行

win.webContents.print({silent:true, printBackground:true})

没有成功。现在就是这样:
npm ERR!失败printer@0.1.1安装脚本“节点gyp重建”。npm错误!这很可能是打印机软件包的问题,npm ERR!与npm本身无关。npm错误!告诉作者这在您的系统上失败:npm ERR!节点gyp重建npm错误!你可以通过以下途径获得他们的信息:npm ERR!npm所有者ls打印机npm错误!上面可能还有其他日志输出。
@leamasuero查看文档,还有另一种使用节点gyp的方法。也许这会有帮助。@leamasuero,上次我遇到这个错误时,我通过将我的节点版本降级到
8.x.x
解决了它。要使
节点打印机与electron兼容,需要将它移植到
NAN 2
,这是对的吗?我的意思是,Electron现在使用的是节点v4,V8 api有了很大的变化。是的,我想是的。我有一个类似的情况,使用一个不同的包,我必须使用它来实现我需要的更改,以便使用electron构建它。大多数变化都是表面的。。。大多数。节点打印机在windows上不适用于我。这是唯一可行的,如果我想打印简单的文本或一些原始数据。Buy无法打印任何JPEG或PDF。你在windows上测试过吗?顺便说一句,writeFile('output.pdf')
不起作用,但底部的那个起作用了!