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')
不起作用,但底部的那个起作用了!