javascript - 使用 html-pdf 后 Sails EJS-view 不渲染图像

标签 javascript image pdf sails.js ejs

我需要能够渲染 html View (没什么新内容)并向最终用户提供与 PDF 文件相同的 View 。

第一个案例在我这边工作得很好:我成功地渲染了一个简单的 html5 文档以及图像两次(base64 版本 + 标准方式)。

不幸的是,当我尝试将其转换为 PDF 文件时,感谢 html5-to-pdfhtml-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/

相关文章:

javascript - jsPDF 没有创建正确的 PDF

javascript - 为什么我的数学题没有显示在屏幕上?

javascript - 如何在 Parse 中创建一对多关系?

css - 使用比容器更大的图像以获得更好的 css 质量

PHP 脚本为每个 SQL 行输出单独的 PDF - FPDF

php - 使用 mysql 变量创建 PDF 文档

javascript - 在范围内使用 Typeahead 和 AngularJS 加载数据会导致 "TypeError: Cannot call method ' then' of undefined"

Javascript String to Date 适用于 Chrome,不适用于 FF 或 Safari

python - 使用 OpenCV/Numpy 展平图像背景

image - 在 Unity 3D 中更改按钮图像