2015-08-28 8 views
12

मैं इलेक्ट्रॉन अनुप्रयोग से node printer का उपयोग करने की कोशिश कर रहा हूं, लेकिन जैसे ही मैं प्रिंटर का उपयोग करने के लिए लाइन जोड़ता हूं, ऐप क्रैश हो जाता है।इलेक्ट्रॉन अनुप्रयोग से प्रिंट करें

कंसोल आउटपुट इस: [1] 9860 segmentation fault (core dumped) node_modules/electron-prebuilt/dist/electron.

इस एप्लिकेशन को मैं चल रहा हूँ है। मैंने केवल इलेक्ट्रॉन दस्तावेज पर दिए गए सरल ऐप उदाहरण में प्रिंटिंग लाइनों को जोड़ा:

var app = require('app'); // Module to control application life. 
var BrowserWindow = require('browser-window'); // Module to create native browser window. 
var printer = require('printer'); 

// Report crashes to our server. 
require('crash-reporter').start(); 

// Keep a global reference of the window object, if you don't, the window will 
// be closed automatically when the JavaScript object is GCed. 
var mainWindow = null; 

// Quit when all windows are closed. 
app.on('window-all-closed', function() { 
    // On OS X it is common for applications and their menu bar 
    // to stay active until the user quits explicitly with Cmd + Q 
    if (process.platform != 'darwin') { 
    app.quit(); 
    } 
}); 

// This method will be called when Electron has finished 
// initialization and is ready to create browser windows. 
app.on('ready', function() { 
    // Create the browser window. 
    mainWindow = new BrowserWindow({width: 800, height: 600}); 

    // and load the index.html of the app. 
    mainWindow.loadUrl('file://' + __dirname + '/app/index.html'); 

    // Open the devtools. 
    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);} 
    }); 


    // Emitted when the window is closed. 
    mainWindow.on('closed', function() { 
    // Dereference the window object, usually you would store windows 
    // in an array if your app supports multi windows, this is the time 
    // when you should delete the corresponding element. 
    mainWindow = null; 
    }); 
}); 

क्या मुझे कुछ याद आ रही है? मैंने अपने स्वयं के नोड प्रिंटर की कोशिश की और मैंने कुछ गड़बड़ पाठ सफलतापूर्वक मुद्रित किया।

उत्तर

6

node-printer देशी बाइंडिंग का उपयोग करता है और docs के अनुसार:

देशी नोड मॉड्यूल इलेक्ट्रॉन द्वारा समर्थित हैं, लेकिन इलेक्ट्रॉन के बाद से सरकारी नोड से एक अलग वी 8 संस्करण का उपयोग कर रहा है, आप करने के लिए है मैन्युअल रूप से निर्दिष्ट देशी मॉड्यूल का निर्माण करते समय इलेक्ट्रॉन के शीर्षकों का स्थान।

मुझे लगता है कि आपको seg fault मिल रहा है। इलेक्ट्रॉन हेडर डॉक्स में उल्लेख किया के खिलाफ मॉड्यूल का निर्माण करने का प्रयास करें:

npm install --save-dev electron-rebuild 

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

कोई सफलता के साथ यह क्या उपयोग कर सकते हैं। यह अब होता है: 'एनपीएम ईआरआर! प्रिंटर @0.1.1 में विफल स्क्रिप्ट 'नोड-जीईपी पुनर्निर्माण' स्थापित करें। एनपीएम ईआरआर! प्रिंटर पैकेज, एनपीएम ईआरआर के साथ यह सबसे अधिक संभावना है! खुद एनपीएम के साथ नहीं। एनपीएम ईआरआर! लेखक को बताएं कि यह आपके सिस्टम पर विफल रहता है: एनपीएम ईआरआर! नोड-जीईपी पुनर्निर्माण एनपीएम ईआरआर! आप उनकी जानकारी प्राप्त कर सकते हैं: एनपीएम ईआरआर! एनपीएम मालिक एलएस प्रिंटर एनपीएम ईआरआर! ऊपर अतिरिक्त लॉगिंग आउटपुट होने की संभावना है। – leamasuero

+0

@leamasuero दस्तावेज़ देखें, नोड-जीईपी का उपयोग करने का एक और तरीका भी है। शायद यह मदद करता है। –

3

node-printer मॉड्यूल उस में सी ++ कोड है। जिसका अर्थ है कि आपको इसे नोड के उसी संस्करण का उपयोग करके संकलित करना है जो इलेक्ट्रॉन का उपयोग कर रहा है। यह वास्तव में करने योग्य है, लेकिन यह बहुत जटिल है।

दूसरी ओर, इलेक्ट्रॉन पहले से ही मुद्रण एपीआई उस में की है: http://electron.atom.io/docs/v0.34.0/api/browser-window/#win-print-options

इस एपीआई पर्याप्त नहीं है और आप अभी भी लाभ उठाने के लिए node-printer मॉड्यूल मुझे पता है चाहता हूँ और मैं एक साथ इस प्रतिक्रिया संपादित करेंगे तो फोर्क कैसे करें और node-printer को ठीक करने के बारे में लंबा उत्तर दें ताकि यह इलेक्ट्रॉन अनुकूल हो।

+0

जिसमें इलेक्ट्रॉन के साथ संगत 'नोड-प्रिंटर' होना आवश्यक है, उसे 'NAN 2' पर पोर्ट करना आवश्यक है, क्या यह सही है? – apairet

+0

मेरा मतलब यह है कि इलेक्ट्रॉन अब 'नोड v4' और V8 api का उपयोग करता है काफी बदल गया है। – apairet

+0

हाँ मुझे ऐसा लगता है। मेरे पास एक अलग पैकेज के साथ एक समान स्थिति थी और मुझे इसे इलेक्ट्रॉनों के साथ बनाने के लिए आवश्यक परिवर्तनों को लागू करने के लिए इसे फोर्क करना पड़ा। अधिकांश परिवर्तन सतही थे ... उनमें से अधिकांश। –

2
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}) 
संबंधित मुद्दे