Node.js用@sendgrid/mail发邮件时PDF附件logo不显示如何解决
PDF附件内logo无法显示问题解决办法
问题原因1:冗余的PDF生成代码冲突
你代码顶部初始化的PDFDocument实例逻辑完全多余,会提前占用目标文件路径,导致后续HTML转PDF的写入操作出现IO冲突,进而丢失图片资源,直接删除以下3行代码即可:
let doc = new PDFDocument; doc.pipe(fs.createWriteStream(pathToAttachment)); doc.end();
问题原因2:HTML内logo资源无法被PDF生成库识别
大部分HTML转PDF的工具无法直接加载相对路径的本地图片或者未完成加载的网络图片,可选择以下两种方案解决:
- 方案1:将公司logo转为base64编码,直接内嵌到HTML的img标签中,示例如下:
这种方式不需要额外加载外部资源,兼容性最高。<img src="data:image/png;base64,替换为你的logo文件base64编码" alt="公司logo"> - 方案2:将logo的路径改为完整的本地绝对路径,格式为
file:///完整的文件系统路径/logo.png,同时确保运行Node.js进程的账号对该路径有读取权限。
问题原因3:网络图片加载超时
如果你的logo用的是公网可访问的链接,需要在PDF生成配置中增加超时时间,给足资源加载的窗口期,修改config配置如下:
var config = { format: 'A4', timeout: 3000 // 单位为毫秒,可根据需要调整 };
同时要确保服务器所在的网络环境可以正常访问该图片链接,不要使用内网、本地测试环境的私有链接。
验证步骤
在发送邮件前,先手动打开本地生成的pathToAttachment路径下的PDF文件:
- 如果本地打开后logo也无法显示,说明问题出在PDF生成环节,按照上面的方案排查即可
- 如果本地打开显示正常,说明问题和SendGrid无关,当前的邮件附件配置没有问题,发送后收件方收到的PDF也会正常显示logo
内容的提问来源于stack exchange,提问作者Rugma
相关产品推荐
相关产品推荐

