将Xero的getAsPDF返回Buffer转为Base64格式生成PDF遇问题
解决Xero getAsPDF接口Buffer转PDF失败的问题
先排查最基础的验证点:
- 把接口返回的原始Buffer直接写入本地文件,确认是否能正常打开:
如果这个文件能打开,说明问题出在Base64转换环节;如果打不开,检查请求头是否设置了// Node.js示例 const fs = require('fs'); fs.writeFileSync('test.pdf', yourBufferResponse);Accept: application/pdf,确保Xero返回的是正确的二进制PDF数据。
如果原始Buffer是正常的,重点检查Base64转换逻辑:
- 禁止先把Buffer转成utf8字符串再转Base64,这会直接破坏二进制结构。正确做法是用Buffer自带的Base64编码方法:
// Node.js正确转换方式 const base64Str = yourBufferResponse.toString('base64'); - 前端场景下,确保先拿到ArrayBuffer再转Base64,不要直接处理字符串响应:
// 前端示例 const arrayBuffer = await response.arrayBuffer(); const base64Str = btoa(String.fromCharCode(...new Uint8Array(arrayBuffer)));
发送PDF时的注意事项:
- 若通过API发送原始PDF,请求头需设置
Content-Type: application/pdf;若发送Base64数据,需在字符串前添加前缀data:application/pdf;base64,(比如前端嵌入PDF时需要)。
最后排查中间环节:确认日志打印、JSON序列化等操作没有篡改Buffer数据,这类操作极易损坏二进制内容。
内容的提问来源于stack exchange,提问作者Furkan Gulsen
相关产品推荐
相关产品推荐

