我想围绕pdf文档构建一个包装器来存储更多信息。我用FileReader
尝试了reader.readAsBinaryString()
,但这打破了pdf文件(某些部分像图片一样缺失)。
所以我尝试了reader.readAsArrayBuffer()
,似乎没有任何损害。但我不知道要将ArrayBuffer转换为字符串,以便将其值写入json文件中以将其导出。
当我使用btoa(new TextDecoder("utf-8").decode(e.target.result))
我收到错误:The string to be encoded contains characters outside of the Latin1 range.
答案 0 :(得分:2)
这听起来像是一个可怕的想法,但无论如何,可能会帮助别人......
将二进制文件编码为字符串的最简单,最可靠的方法是将其编码为base64。
FileReader API有readAsDataURL()
方法,它将返回由URI标头和base64二进制数据组成的data URI。
所以如果你只想要数据作为字符串,你所需要的就是抓住" base64,"之后的所有内容。在返回的dataURI中。
inp.onchange = e => {
const reader = new FileReader();
reader.onload = e => {
var myObj = {
name: inp.files[0].name,
data: reader.result.split('base64,')[1]
};
console.log(JSON.stringify(myObj));
};
reader.readAsDataURL(inp.files[0]);
};

<input type="file" id="inp">
&#13;
现在,我无法建议存储整个pdf文件,而且其中包含JSON文件中的图像。编码为base64的二进制数据将增长34%(IIRC)。因此,您可能需要考虑将元数据和原始pdf文件保存在单个二进制压缩文件(例如zip)中。