Electronアプリケーションから node printer を使用しようとしていますが、プリンターを使用する行を追加するとすぐに、アプリがクラッシュします。
コンソールはこれを出力します:
[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);}
});
});
何か不足していますか?
ノードプリンターを単独で試してみたところ、意味のないテキストが正常に印刷されました。
node-printer
は docs に従ってネイティブバインディングを使用します。
ネイティブNodeモジュールはElectronでサポートされていますが、Electronは公式Nodeとは異なるV8バージョンを使用しているため、ネイティブモジュールを構築する際にElectronのヘッダーの場所を手動で指定する必要があります。
それがあなたがseg fault
を取得している理由だと思います。ドキュメントに記載されているように、electronヘッダーに対してモジュールをビルドしてみてください。
npm install --save-dev electron-rebuild
# Every time you run npm install, run this too
./node_modules/.bin/electron-rebuild
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})
node-printer
モジュールにはC++コードが含まれています。つまり、electronが使用しているのと同じバージョンのノードを使用してコンパイルする必要があります。これは実際には実行可能ですが、かなり複雑です。
一方、Electronには既に印刷APIが含まれています。
https://electronjs.org/docs/api/web-contents#contentsprintoptions-callback
このAPIが十分ではなく、node-printer
モジュールを活用したい場合は、この応答を編集して、node-printer
をフォークして修正する方法についての長い回答を編集し、電子互換性を確保します。 。