我正在尝试使用PhantomJS呈现PDF文档并发送给用户,但不会在此过程中创建任何文件。原因是安全性,如果我不存储任何文件,就没有什么东西可以被盗。我试图做的是不是运行“page.render(filePath,cb)”我做“page.renderBase64('PNG',cb)”,这样就没事了,除了页面数量等所有页脚和页眉都没了(当我只渲染PDF文件时,他们就在那里)
有没有办法让这些页脚/标题呈现或以不同方式完成我的任务?
编辑: 对不起,我已经在凌晨5点左右发布了这个问题,经过几个小时的战斗,我只是忘了添加我认为可能有用的代码。注释掉的代码完全正常,并生成我期望的页脚和标题文件。我的PhantomJS版本是2.0.0
return P.coroutine(function* () {
var result = yield getPhantom();
result.page.set('content', template);
var options = {
format: 'Letter',
paperSize: {width: '215.9mm', height: '279.4mm'},
margin: {
left: '25.4mm',
right: '25.4mm',
top: '25.4mm',
bottom: '25.4mm'
}
};
if (document.metadata && document.metadata.enableHeader) {
options.header = {
height: '30px',
contents: result.ph.callback(function (pageNum, numPages) {
return '<div style="pull-right; font-size: 10px;">Page ' + pageNum + ' of ' + numPages + '</div>';
})
}
}
if (document.metadata && document.metadata.enableFooter) {
var footerTemplate = document.footer ?
document.footer : yield fs.readFile(path.join(templatesPath, 'footer.hbs'), 'utf8');
var footer = Handlebars.compile(footerTemplate)({
data: data,
metadata: document.metadata
});
var returnFooter = new Function('pageNum', 'numPages', `return '${footer.replace(/(\r\n|\n|\r)/gm, '')}'`);
options.footer = {
height: document.metadata.footerHeight || '120px',
contents: result.ph.callback(returnFooter)
}
}
result.page.set('paperSize', options);
//var filePath = path.join(tmpPath, fileService.randomName() + '.pdf');
var base64 = yield P.fromNode((cb) => result.page.renderBase64('PNG', cb.bind(null, null)));
//yield P.fromNode(function (cb) {
// result.page.render(filePath, cb);
//});
result.ph.exit();
return base64;
//return filePath;
})();
}