使用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
相关产品推荐
相关产品推荐

