如何在转换为PDF的EJS模板中正确插入存储的图片资源
解决方案
1. 修改EJS模板,使用img标签渲染图片
你当前的写法是直接输出图片URL文本,需要替换为HTML的<img>标签才能渲染图片:
<% dataw.data2.forEach(function(a){ %> <div class="row"> <div class="col-sm-6"> <div class="mb-4 pull-left"> <div> <!-- 替换为img标签,src属性填图片URL --> <img src="<%= a.graph_img %>" alt="图表" style="max-width: 100%;"> </div> </div> </div> </div> <% }); %>
如果后续发现URL被转义导致无法访问,可以把<%=替换为<%-输出未转义的内容。
2. 修正图片路径映射错误
你服务端保存图片的路径是./public/images/graph_images,但返回的URL路径是/public/images/graph_images_for_pdf/,两处文件夹名不一致,需要先修正这个问题:
- 要么修改保存路径的文件夹名为
graph_images_for_pdf - 要么修改返回的URL路径为
/public/images/graph_images/
修正后先在浏览器直接访问图片URL,确认可以正常打开图片,再测试PDF生成。
3. 适配服务端PDF生成工具的路径规则
如果你使用的是服务端PDF生成工具(如Puppeteer、wkhtmltopdf、html-pdf等),localhost域名可能在服务端无法正常解析,可以按优先级选一种方案优化:
- 把URL中的
localhost:5000替换为127.0.0.1:5000 - 直接返回图片的本地绝对物理路径(如
/opt/project/public/images/xxx.jpeg) - 不存储图片到本地,直接把base64格式的图片内容放到
graph_img字段返回,无需额外路径解析,兼容性最高
内容的提问来源于stack exchange,提问作者fungusblacky
相关产品推荐
相关产品推荐

