EJS无法在静态公共文件夹中找到图像

发布于 2025-01-11 11:45:18 字数 1130 浏览 0 评论 0原文

我正在尝试使用 EJS 将 html 模板渲染为 PDF,但是图像没有出现。 我的项目结构:

 - public
   - images
       image.jpg
 - routes
     documentsRoute.js
 - services
     documentsService.js
 - views
     document-template.ejs
 server.js

我将公共文件夹设置为 server.js 中的静态文件夹,如下所示:

...
const app = express()
app.use(express.static('public'))
...

在我的模板文件中,我使用它作为图像的 src,

<img src="images/image.jpg" alt="my_image">

我从文档服务渲染文件,如下所示:

ejs.renderFile('views/document-template.ejs', inputs, (err, data) => {
            if (err){
                throw err;
            }

            let options = {
                "format": "A4",
                "header": {
                    "height": "20mm"
                },
                "footer": {
                    "height": "20mm"
                }
            };

            pdf.create(data, options).toFile('test.pdf', (err, res) => {
                if(err){
                    throw err;
                }
            });
        })

模板的其余部分已正确呈现,只是图像没有,而是显示替代文本。有谁知道我该如何解决这个问题?

I'm trying render a html template as a PDF using EJS, however the images are not appearing.
My project structure:

 - public
   - images
       image.jpg
 - routes
     documentsRoute.js
 - services
     documentsService.js
 - views
     document-template.ejs
 server.js

I am setting the public folder as a static folder in my server.js like so:

...
const app = express()
app.use(express.static('public'))
...

In my template file I'm using this as my src for the image

<img src="images/image.jpg" alt="my_image">

I'm rendering the file from my document service like so:

ejs.renderFile('views/document-template.ejs', inputs, (err, data) => {
            if (err){
                throw err;
            }

            let options = {
                "format": "A4",
                "header": {
                    "height": "20mm"
                },
                "footer": {
                    "height": "20mm"
                }
            };

            pdf.create(data, options).toFile('test.pdf', (err, res) => {
                if(err){
                    throw err;
                }
            });
        })

The rest of the template is rendered correctly, just not the image, instead it shows the alt text. Does anyone know how I could fix this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

信愁 2025-01-18 11:45:18

您需要在服务器文件中正确设置视图目录。
因此,而不是 app.use(express.static('public'))
尝试

app.use(express.static( path.join(__dirname, './public')))

You need to set the view directory correctly in your server file.
So instead of app.use(express.static('public'))
try

app.use(express.static( path.join(__dirname, './public')))
Smile简单爱 2025-01-18 11:45:18

这是 pdf 的路径有问题。尝试使用绝对路径

pdf 选项的 base 属性中添加完整路径:

let options = {
    "format": "A4",
    //...
    base: `${req.protocol}://${req.headers.host}`
};

it's rather pdf having trouble with the path. try using absolute path

add full path in the base property of pdf options:

let options = {
    "format": "A4",
    //...
    base: `${req.protocol}://${req.headers.host}`
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文