如何使用 pdf.js 在外部查看器 (viewer.html) 中打开来自服务器的 base64 字符串响应?

May*_*yur 2 javascript jquery pdf.js

在我的应用程序中,我正在向服务器发送一个路径,并以 base64 字符串形式返回一个 pdf 文件内容。现在我想使用 pdf.js 在外部查看器 (viewer.html) 中显示这个字符串。我正在以下列方式这样做,我做错了什么?

var res="JVBERi0xLjUK..."; // Base64 String from response shortened
var pdfData = base64ToUint8Array(res);
window.open('pdfJs/viewer.html?file='+pdfData);

function base64ToUint8Array(base64) {
var raw = atob(base64); //This is a native function that decodes a base64-encoded string.
var uint8Array = new Uint8Array(new ArrayBuffer(raw.length));
for(var i = 0; i < raw.length; i++) {
    uint8Array[i] = raw.charCodeAt(i);
}

return uint8Array;
}
Run Code Online (Sandbox Code Playgroud)

我现在得到的输出:

在此处输入图片说明

我已经浏览了一些答案,但无法解决。所以请帮助我。

asy*_*nc5 5

Uint8Array 不能通过查询字符串传递。在打开的窗口上使用 PDFViewerApplication.open() 方法,例如

var w = window.open('web/viewer.html?file=');
w.addEventListener('load', function () {

  var res="JVBERi0xLjUK..."; // Base64 String from response shortened

  var pdfData = base64ToUint8Array(res);
  w.PDFViewerApplication.open(pdfData);

  function base64ToUint8Array(base64) {
    var raw = atob(base64);
    var uint8Array = new Uint8Array(raw.length);
    for(var i = 0; i < raw.length; i++) {
      uint8Array[i] = raw.charCodeAt(i);
    }
    return uint8Array;
  }
}, true);
Run Code Online (Sandbox Code Playgroud)