使用pdf-lib生成Uint8Array格式PDF,通过Blob打开显示为空的问题
问题原因及解决办法
你的代码问题出在Blob的创建方式上:Blob构造函数的第一个参数必须是一个包含二进制数据的数组,而你直接传入了Uint8Array对象。当你直接传pdfBytes时,JS会把它当成类数组对象,将每个字节单独作为数组元素处理,最终生成的Blob内容完全不符合PDF格式,所以查看器显示为空。
修正后的代码
const pdfBytes = await pdfDoc.save(); // create the pdf as uint8array //download(pdfBytes, fn, "application/pdf"); let blb = new Blob([pdfBytes], {type: 'application/pdf'}); // 把Uint8Array放到数组里 let link = window.URL.createObjectURL(blb); window.open(link);
补充说明
- 这样创建的Blob才会正确把
Uint8Array中的二进制数据打包成PDF格式的文件 - 生成的ObjectURL可以正常被浏览器PDF查看器解析,无需保存到本地磁盘
内容的提问来源于stack exchange,提问作者fanThomas
相关产品推荐
相关产品推荐

