web-dev-qa-db-ja.com

Electronアプリケーションから印刷する

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);}
  });      
});

何か不足していますか?

ノードプリンターを単独で試してみたところ、意味のないテキストが正常に印刷されました。

15
leamasuero

node-printerdocs に従ってネイティブバインディングを使用します。

ネイティブ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
9
Yan Foto
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})
5
Rohit Goyal

node-printerモジュールにはC++コードが含まれています。つまり、electronが使用しているのと同じバージョンのノードを使用してコンパイルする必要があります。これは実際には実行可能ですが、かなり複雑です。

一方、Electronには既に印刷APIが含まれています。

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

このAPIが十分ではなく、node-printerモジュールを活用したい場合は、この応答を編集して、node-printerをフォークして修正する方法についての長い回答を編集し、電子互換性を確保します。 。

4
justin.m.chase