将pdf作为ArrayBuffer读取,将其存储在json文件中,并附上详细信息

时间:2018-05-03 13:56:10

标签: javascript

我想围绕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.

1 个答案:

答案 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;
&#13;
&#13;

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