我需要能够呈现HTML视图(那里没有新事物),并向最终用户提供与PDF文件相同的视图。
第一种情况非常适合我的身边:我设法渲染了一个简单的HTML5文档,同样是图像两次(Base64版本 标准方式)。
不幸的是,当我尝试将其转换为PDF文件时,借助html5-to-pdf
或html-pdf
时,<img>
标签的非Base64版本不起作用,并将其作为PDF文件中的缺少资源发出信号。
我正在使用的代码如下:
控制器:
//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任务和资产管理的帆规范,因此确实存在给定的images/ymca.jpg
,并且可以从浏览器访问。我仍然不知道为什么PDF不会渲染它。
您要做的就是在pdf上渲染时使用完整的图像路径控制器
var variables = {
path: sails.config.appPath + 'assets/images/ymca.jpg'
};
查看
<img class="smaller" src="<%= path %>" alt="Sample image #2" />
当使用HTML-PDF在PDF上渲染时,它与绝对路径不起作用。