我需要能够渲染 html View (没什么新内容)并向最终用户提供与 PDF 文件相同的 View 。
第一个案例在我这边工作得很好:我成功地渲染了一个简单的 html5 文档以及图像两次(base64 版本 + 标准方式)。
不幸的是,当我尝试将其转换为 PDF 文件时,感谢 html5-to-pdf
或html-pdf
, <img>
的非 Base64 版本标签不起作用,并被标记为 PDF 文件中缺少资源。
我使用的代码如下:
Controller :
//res is the response parameter provided to the controller
var pdf = require('html-pdf');
var variables = {
};
ejs.renderFile('./views/samplepdf.ejs', variables, function(err, result) {
// render on success
if (result) {
html = result;
pdf.create(html).toStream(function(err, stream){
res.contentType("application/pdf");
stream.pipe(res);
});
}
// render or error
else {
res.end('An error occurred');
console.log(err);
}
});
查看:
<h2>Image</h2>
<img class="smaller" src="data:image/jpeg;base64,/validbase64ButIHadToSaveBecauseCharactersLimitExceeded" alt="Sample image" />
<img class="smaller" src="images/ymca.jpg" alt="Sample image #2" />
我仔细阅读了有关 Grunt 任务和 Assets 管理的 Sails 规范,因此给出了 images/ymca.jpg
确实存在并且可以从浏览器访问。我仍然不知道为什么 PDF 不渲染它。
最佳答案
您所要做的就是在 pdf 上渲染时使用图像的完整路径 Controller
var variables = {
path: sails.config.appPath + 'assets/images/ymca.jpg'
};
查看
<img class="smaller" src="<%= path %>" alt="Sample image #2" />
当使用 html-pdf 渲染 pdf 时,它不适用于绝对路径。
关于javascript - 使用 html-pdf 后 Sails EJS-view 不渲染图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41302988/