J'essaie d'utiliser imprimante de nœud à partir d'une application Electron, mais dès que j'ajoute les lignes pour utiliser l'imprimante, l'application se bloque.
La console affiche ceci:
[1] 9860 segmentation fault (core dumped) node_modules/electron-prebuilt/dist/electron.
Voici l'application que j'utilise:
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);}
});
});
Suis-je en train de manquer quelque chose?
J'ai essayé l'imprimante de noeud seule et j'ai réussi à imprimer du texte de charabia.
node-printer
utilise des liaisons natives et selon docs :
Les modules natifs Node sont pris en charge par Electron, mais comme Electron utilise une version V8 différente de Node officielle, vous devez spécifier manuellement l'emplacement des en-têtes d'Electron lors de la construction de modules natifs.
Je suppose que c'est pourquoi vous obtenez le seg fault
. Essayez de construire le module contre les en-têtes d'électrons comme mentionné dans la documentation:
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.')
})
})
})
Sinon, vous pouvez également utiliser la ligne suivante
win.webContents.print({silent:true, printBackground:true})
Le node-printer
le module contient du code C++. Ce qui signifie que vous devez le compiler en utilisant la même version du nœud que l'électron utilise. C'est faisable en fait, mais c'est assez compliqué.
D'un autre côté, Electron contient déjà des API d'impression:
https://electronjs.org/docs/api/web-contents#contentsprintoptions-callback
Si cette API n'est pas suffisante et que vous souhaitez toujours utiliser le node-printer
module faites le moi savoir et je modifierai cette réponse avec une réponse plus longue sur la façon de bifurquer et de réparer node-printer
pour qu'il soit compatible avec les électrons.