【问题标题】:Generated PDF does not have image included from its Handlebars template生成的 PDF 没有包含在其 Handlebars 模板中的图像
【发布时间】:2018-11-13 22:40:00
【问题描述】:
app.get('/individual_report/:athlete_id', function(req, res) {
  database.select('*').from('participants').then(data => {
    if (data.length) {
      res.render('individual_report', {
        name: data
      });
      const hbsfile = fs.readFileSync(__dirname + '/../public/views/individual_report.hbs', 'utf8');
      const document = {
        template: hbsfile,
        context: {
          options: {
            dataForPDF: data,
            ssl_logo: '../public/static/assets/image/white_ssl_logo.png',
          },

    },
    path: __dirname + '/../public/reports/' + data[0].first_name + " " + data[0].last_name + '\'s scores.pdf'
  };
  pdf.create(document, options).then(res => {
    console.log(res)
  }).catch(error => {
    console.error(error)
  });
} else {
  res.json({
    msg: 'Invalid athlete ID'
  });
}
  }).catch(err => res.sendStatus(400));
});

上面的 node express 路由渲染了一个 html 页面,并且还使用 HandleBars .hbs 模板生成了一个 PDF。

<img class="ssl_logo" src="{{{options.ssl_logo}}}" alt="logo.png" width="120" height="50" />

这是我在 .hbs 文件中应该显示徽标图像文件的内容。

图像不会在浏览器和 PDF 文件中呈现。但是,alt 属性会在浏览器和 PDF 中呈现。我查看了控制台日志,在源属性中得到了这个未知数:

img class="ssl_logo" src(unknown) alt="logo.png" width="120" height="50"

我正在使用 dynamic-html-pdf 节点包来生成此报告,任何人都可以向我推荐一些可能使它起作用的东西吗?谢谢。

【问题讨论】:

    标签: image express pdf-generation


    【解决方案1】:

    尝试使用文件协议

     ssl_logo: 'file://' + __dirname + '/public/static/assets/image/white_ssl_logo.png',
    

    即使生成 SVG 图像也能正常工作

    【讨论】:

      【解决方案2】:

      Welp,我将回答我自己的帖子。由于某种原因,这段代码没有读取本地图像文件,所以我所做的是将图像上传到谷歌驱动器,获取可共享链接,谷歌如何修改可共享链接,因为生成的链接在我们的中不起作用代码,并用链接替换图像文件地址。

      希望这将帮助那些已经或将要遇到此问题的人。 (最终还是得自己解决问题,哈哈)

      【讨论】:

        猜你喜欢
        • 2010-12-10
        • 1970-01-01
        • 1970-01-01
        • 2013-12-23
        • 2012-12-02
        • 2012-04-16
        • 2010-11-19
        • 2012-07-03
        • 1970-01-01
        相关资源
        最近更新 更多