Adobe PDF Embed API获取的Int8Array格式PDF如何转Base64
可行解决方案
1. 小文件同步方案
直接复用Int8Array底层的二进制缓冲区生成Uint8Array,再转Base64即可:
// content为你拿到的Int8Array类型的PDF数据 const uint8Content = new Uint8Array(content.buffer); const base64 = btoa(String.fromCharCode.apply(null, uint8Content)); // 拿到base64后即可直接上传AWS
2. 大文件异步方案(推荐,避免栈溢出)
如果PDF体积较大,使用Blob+FileReader的异步方案更稳定:
function int8PDFToBase64(int8Arr) { return new Promise((resolve, reject) => { const uint8 = new Uint8Array(int8Arr.buffer); const reader = new FileReader(); reader.onload = () => resolve(reader.result.split(',')[1]); reader.onerror = reject; reader.readAsDataURL(new Blob([uint8], { type: 'application/pdf' })); }); } // 调用示例 int8PDFToBase64(content).then(base64 => { // 此处直接使用转换完成的纯Base64内容 console.log(base64); });
错误原因说明
- 之前使用
TextDecoder('utf8')解码是错误的:PDF是二进制文件,不是UTF-8编码的文本,强制解码会生成大量超出Latin1范围的特殊字符,直接触发btoa的编码限制报错。 - 不需要手动给Int8的每个值加128转Uint8:Int8Array和Uint8Array只是对同一段底层ArrayBuffer数据的不同读取视图,直接传入buffer构造新的Uint8Array即可实现无损转换,不需要手动修改任何字节值。
内容的提问来源于stack exchange,提问作者user1779362
相关产品推荐
相关产品推荐

