我正在处理大量数据。我想生成一个包含 1 年数据的 PDF 报告。我正在使用 html-pdf 来做到这一点。问题是生成 PDF 大约需要 20 分钟。我可以减少它吗?
我不想让我的用户等待 20 分钟。
注意:我只想在服务器端生成 PDF,我想把它邮寄给用户。
我尝试了一些解决方案,但我不喜欢任何解决方案。但我观察到的是,当我从谷歌下载一些文件时,工作流程非常流畅。
我想知道如何使我的工作流程顺畅
app.post('/api', (req, res) => {
var json = req.body;
var sqlGet = 'SELECT StationId,TimeStamp,data->>"$.temperature" as temperature,data->"$.humidity" as humidity,data->"$.so2" as so2,data->"$.no2" as no2,data->"$.co" as co,data->"$.o3" as o3,data->"$.co2" as co2,data->"$.pm10" as pm10,data->"$.noise" as noise,data->"$.rain" as rain,data->"$.wdir" as wdir,data->"$.wspeed" as wspeed,data->"$.press" as press FROM TwentyStationFiveYearData WHERE StationId = ' + json.stationid + ' AND TimeStamp >= ' + json.start + ' AND TimeStamp <= ' + json.end;
console.log('' + sqlGet);
connection.query(sqlGet, function(err, result) {
if (err) {
console.log('error' + err);
} else {
var htmlCode = generateTable(result, 15);
//var output = fs.createWriteStream('reports/' + json.start + '-' + json.end + '.pdf');
pdf.create(htmlCode, {
orientation: 'landscape',
type: 'pdf',
timeout: '1800000'
}).toStream(function(err, stream) {
if (err) {
console.log('stream did not work ' + err);
} else {
stream.pipe(fs.createWriteStream('output.pdf'));
console.log('pdf generated');
res.send("report will be mailed");
}
});
}
});
});
function generateTable(jsonData, columns) {
var tab = '';
var headers = ['StationId', 'TimeStamp', 'temperature', 'humidity', 'so2', 'no2', 'co', 'o3', 'co2', 'pm10', 'noise', 'rain', 'wdir', 'wspeed', 'press'];
tab += '<tr>';
for (var c = 0; c < columns; c++) {
tab += '<th>';
tab += headers[c];
tab += '</th>';
}
tab += '<tr>';
jsonData.forEach(obj => {
tab += '<tr>';
for (var c = 0; c < columns; c++) {
tab += '<td>';
tab += obj[headers[c]];
tab += '</td>';
}
tab += '</tr>';
});
tab = '<table border = "1">' + tab + '</table>';
return html(tab);
}
function html(table) {
var htmlCode = '<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><title>Title</title></head><body>' + table + '</body></html>';
return htmlCode;
}
我想让我的工作流程更顺畅并减少生成 PDF 报告所需的时间