You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用qrcode与exceljs库生成含QR码的Excel,QR码未正常显示问题咨询

问题原因
  • QRCode.toDataURL() 方法返回的是带格式前缀的Data URI字符串,格式为data:image/png;base64,xxxx,不是纯Base64编码的图片内容。你直接用Buffer.from(bufferImage)转换时,会把前缀部分也一同转为二进制,最终生成的是损坏的PNG文件,所以Excel里无法正常展示图片。
解决方法

只需要在转换Buffer前移除Data URI的前缀,提取纯Base64内容再转换即可,修正后的代码如下:

app.use('/api/qr/:content', async (req, res) => {
  try {
    const workbook = new ExcelJS.Workbook();
    const sheet = workbook.addWorksheet('Sheet 1');

    const content = req.params.content;
    // 生成Data URL
    const dataUrl = await QRCode.toDataURL(content, {
      type: 'image/png',
      width: 200,
    });
    // 移除Data URL前缀,提取纯base64内容
    const base64Image = dataUrl.split(';base64,').pop();
    // 转Buffer时指定编码为base64
    const imageBuffer = Buffer.from(base64Image, 'base64');
    
    const imageId2 = workbook.addImage({
      buffer: imageBuffer,
      extension: 'png'
    });

    sheet.addImage(imageId2, {
      tl: { col: 0, row: 0 },
      ext: { width: 200, height: 200 }
    });

    await workbook.xlsx.writeFile('ExcelFile.xlsx');
    return res.send({ data: 'ok' });
  } catch (err) {
    console.error('Failed to return content', err);
    res.status(500).send({ error: 'generate failed' });
  }
});
  • 补充优化点:建议异常捕获时给前端返回错误响应,避免请求一直挂起。

内容的提问来源于stack exchange,提问作者ARH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:09:03