我目前正在 Galaxy 上运行一个流星应用程序,它根据用户的输入创建 PDF。
我一直在使用 webshot-node 和 FS 来临时保存 PDF,然后在用户端直接下载。
由于我解决了一些其他错误,我在 Galaxy 上再次部署了新项目,但现在无法再生成 PDF(这部分代码没有任何更改)。
我得到的错误如下:
Error: ENOENT: no such file or directory, open /app/bundle/programs/web.browser/app/cv_resume.pdf
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: '/app/bundle/programs/web.browser/app/cv_resume.pdf'
如前所述,我在生成 PDF 时没有更改任何内容,所以我想知道你们中是否有人在服务器端使用 webshot 和 FS 时遇到类似错误。
顺便说一句,它在我的本地机器上运行良好。
哦,这是一代的代码,以防有人想尝试一下:
var myDocument1 = Personalinfo.findOne({ email: creator });
// SETUP
// Grab required packages
var fs = Npm.require('fs');
var Future = Npm.require('fibers/future');
var webshot = Npm.require('webshot-node');
var fut = new Future();
var meteorRoot = fs.realpathSync(process.cwd() + "/../" );
var publicPath = meteorRoot + "/web.browser/app/";
var fileName = publicPath + "cv_resume.pdf";
// GENERATE HTML STRING
var css = Assets.getText('style.css');
SSR.compileTemplate('layout', Assets.getText('layout.html'));
Template.layout.helpers({
getDocType: function () {
return "<!DOCTYPE html>";
}
});
SSR.compileTemplate('resume', Assets.getText('resume.html'));
// PREPARE DATA
var html_string = SSR.render('layout', {
css: css,
template: "resume",
data: myDocument1
});
var options = {
"paperSize": {
"format": "A4",
"orientation": "portrait",
"margin": "0.8cm"
},
siteType: 'html'
};
// Commence Webshot
webshot(html_string, fileName, options, function (err) {
fs.readFile(fileName, function (err, data) {
if (err) {
return console.error(err);
}
fs.unlinkSync(fileName);
fut.return(data);
});
});
let pdfData = fut.wait();
let base64String = Buffer.from(pdfData).toString('base64');
if (fullName != "") {
return [base64String, fullName];
} else {
return base64String;
}
希望有人可以帮助我,我已经被这个困扰了很长时间了。如果有人需要更多信息,随时可以使用。