首页 > 解决方案 > 无法使用 ejs.renderfile 正确渲染图像

问题描述

我正在尝试从渲染的 ejs 文件创建 pdf,但无论我如何尝试都无法正确渲染图像。

我的 app.js :

let express = require("express");
let app = express();
let ejs = require("ejs");
let pdf = require("html-pdf");
let path = require("path");

app.use( express.static( "public" ) );

app.get("/generateReport", (req, res) => {
    ejs.renderFile("./views/report-template.ejs",  (err, data) => {
    if (err) {
          res.send(err);
    } else {

        pdf.create(data).toFile("certificate.pdf", function (err, data) {
            if (err) {
                res.send(err);
            } else {
                res.send("File created successfully");
            }
        });
    }
});
})
app.listen(3000, function(){ 
    console.log('Server listening on port 3000'); 
  }); 


----------

我的报告模板.ejs 文件

<html>
    <body>
       <img src="certificate.jpg" width=675   height=792>
    </body>
</html>

我已经将certified.jpg 保存在所有位置,包括root、public 等。但它不起作用..请帮助..我是编码和节点的新手。

标签: javascriptnode.jsexpressejs

解决方案


这对我有用,选项 pdf //base 中的参数“base”:${req.protocol}://${req.get('host')}

var options = {
                        "format": "A4",
                        "orientation": "portrait",
                         base: `${req.protocol}://${req.get('host')}`,
               };

pdf.create(resulthtml, options).toStream(function(err, stream) {
                        if (err) res.end('An error occurred on create pdf');
                        res.setHeader('Content-disposition', 'inline; filename="' + stream.filename + '"');
                        res.setHeader('Content-type', 'application/pdf');
                        stream.pipe(res);
});

然后现在在模板中

<img src="/public/image.png">

或者干脆

 <img src="image.png">

推荐阅读