我正在尝试为学生注册表创建一个动态模板,并且正在尝试打印它,
问题是第一次按下打印按钮时,它可以打印并且一切正常,但是第二次之后,它虽然显示了打印窗口,但直到重新启动服务器本身后才起作用。
这里是main.js
$('#elemID').submit(function(e) {
e.preventDefault();
var x = $('#numberOfStudents').val();
var output = [];
for (var i = 1; i <= x; i++) {
output.push(`<div><p> student number #0${i} </p></div>`);
}
var data = `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.min.css">
</head>
<body>
<h4>Registation Form</h4>
<h5>Full Name:</h5>
<h5>gender:</h5>
.
.
.
</body>
</html>
`
$.print(data);
})
print.ejs
<form id="elemID">
<input type="number" id="numberOfStudents" placeholder="Number of students eg. 1....2....3">
<button type="submit" id="printApplication">Print Application</button>
</form>
index.js(服务器端)
const {app, BrowserWindow, Menu } = require('electron')
// express
const express = require('express'),
expApp = express(),
server = require('http').createServer(expApp),
db = require('./db/mongoose'),
parentRoutes = require('./routes/parents'),
studentRoutes = require('./routes/students'),
port = process.env.PORT || 3000
let mainWindow
// load the url on listening
function onListening() {
mainWindow.loadURL('http://localhost:3000')
}
// Function create a window
function createWindow() {
// create a new window for main window
mainWindow = new BrowserWindow({
webPreferences: {
nodeIntegration: true
}
})
// express usage
expApp.set('port', port)
expApp.use(parentRoutes)
expApp.use(studentRoutes)
expApp.use(express.static('../semantic'))
// listening to port
server.listen(port, () => {console.log(`listening to port ${port}`);})
server.on('listening', onListening)
}
app.on('ready', createWindow);
我正在使用jquery.print.js
在第二次第一次提交时,一切正常,除非重新启动服务器,否则打印功能无论打印还是保存文件都无法正常工作。
我不知道怎么了?...如果不清楚,请告诉我。
所以请您帮我一下吗?
not禁用nodeIntegration
吗?
{ipcRenderer} = require('electron');
。我找到了这个答案,对我来说非常有用How to print a DIV in ElectronJS
按下打印按钮以通过功能sendDataToServer(data)
将内容发送到服务器端后的操作
main.js
// create a function to send data to server.
function sendDataToServer(content) {
ipcRenderer.send('printPDF', content);
}
$('#elemID').submit(function(e) {
e.preventDefault();
var x = $('#numberOfStudents').val();
var output = [];
for (var i = 1; i <= x; i++) {
output.push(`<div><p> student number #0${i} </p></div>`);
}
var data = `
<h4>Registation Form</h4>
<h5>Full Name:</h5>
<h5>gender:</h5>
.
.
.
`
// call the function
sendDataToServer(data);
})
index.js(服务器端)
const {app, BrowserWindow, Menu } = require('electron') // express const express = require('express'), expApp = express(), server = require('http').createServer(expApp), db = require('./db/mongoose'), parentRoutes = require('./routes/parents'), studentRoutes = require('./routes/students'), port = process.env.PORT || 3000 let mainWindow // load the url on listening function onListening() { mainWindow.loadURL('http://localhost:3000') } // Function create a window function createWindow() { // create a new window for main window mainWindow = new BrowserWindow({ webPreferences: { nodeIntegration: true } }) //create hidden window win = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true } }); // hide the hidden window on ready to show win.once('ready-to-show', () => win.hide()) win.loadURL('file://' + views + '/printApp.html'); // send data to hidden window ipcMain.on('printPDF', (event, content ) => { win.webContents.send('printPDF', content); }); // create the pdf and printing options once hidden window finish rendering ipcMain.on('readyToPrintPDF', (e) => { const pdfPath = path.join(os.tmpdir(), 'print.pdf'); // Use default printing options win.webContents.print({}, function (err, data) { if (err) throw err fs.writeFile(pdfPath, data, function (error) { if (error) throw error shell.openItem(pdfPath) event.sender.send('wrote-pdf', pdfPath) }) }) }) // express usage expApp.set('port', port) expApp.use(parentRoutes) expApp.use(studentRoutes) expApp.use(express.static('../semantic')) // listening to port server.listen(port, () => {console.log(`listening to port ${port}`);}) server.on('listening', onListening) } app.on('ready', createWindow);
printApp.html
<head> <link rel="stylesheet" href="./css/main.css"> </head> <body> <script> const ipcRenderer = require('electron').ipcRenderer; ipcRenderer.on('printPDF', (e, content) =>{ document.body.innerHTML = content; // I set a timeout to take time for rendering the page setTimeout(() => { ipcRenderer.send('readyToPrintPDF') }, 2000) }) </script> </body>