在Typescript / Angular8中将base64字符串转换为uint8Array或Blob

时间:2019-12-03 23:44:14

标签: angular typescript base64 pdfjs ng2-pdfjs-viewer

我对使用Base64编码的string / uint8Array或Blob很陌生。我正在使用此仓库https://github.com/intbot/ng2-pdfjs-viewer中的pdf查看器库作为Angular 8 Web应用程序。 我向UI发送了一个相当大的Base64字符串(550KB,包含34页文本),由pdf查看器呈现。

主要问题是它在查看器中仅显示19页。但是,当我使用查看器下载文档时,它具有全部34页(已通过MacOS上的“预览”应用程序确认)。 我不确定问题出在pdf查看器库还是从Base64到uint8Array / Blob的转换。

这是UI中用于转换Base64字符串的代码

dostuff(b64Data){
    const byteCharacters = atob(b64Data);
    const byteNumbers = new Array(byteCharacters.length);
    for (let i = 0; i < byteCharacters.length; i++) {
      byteNumbers[i] = byteCharacters.charCodeAt(i);
    }
    const byteArray = new Uint8Array(byteNumbers);
    //const blob = new Blob([byteArray], {type: 'application/pdf'});
    //console.log(blob)
    return byteArray
  }

任何帮助将不胜感激。 使用的浏览器:Chrome

1 个答案:

答案 0 :(得分:0)

此问题已解决。问题在于后端API将PDF合并在一起。使用Apache PDFBox的pdf合并实用程序,该实用程序接受输入流,并且ng2-pdfjs-viewer库成功地呈现了合并的pdf文档。 上面的JS代码没有问题。