PDF.js: 在 iframe 中使用 postMessage 将 base64 传递给 viewer.html

PDF.js: using postMessage to pass base64 to viewer.html in iframe

我正在尝试创建一个迷你应用程序(在 Salesforce 中,尽管这可能不是那么相关),它将 PDF.js 中的开箱即用 viewer.html 嵌入到框架。用户 select 列表中的 PDF,应用检索该 PDF 的 base64 并将其传递给查看器。

有一些工作示例使用了 pre-built PDF.js, including this one that uses version 1.5.188 的过时版本。这些工作示例的作用似乎是:

<script>
  if (window.addEventListener) {
      // For standards-compliant web browsers
      window.addEventListener("message", handleMessage, false);
  } else {
      window.attachEvent("onmessage", handleMessage);
  }

  function handleMessage(evt){
    console.log('viewer.html entering handleMessage');
    var raw = atob(evt.data);
    var uint8Array = new Uint8Array(raw.length);
    for (var i = 0; i < raw.length; i++) {
      uint8Array[i] = raw.charCodeAt(i);
    }
    PDFViewerApplication.open(uint8Array);
  }
</script>

这在过时版本上运行良好,但是当我将上述脚本添加到最新版本(撰写本文时为 2.5.207)中的 viewer.html 时,没有任何反应。 PDFViewerApplication 仍然存在于 viewer.js 中,并且仍然有一个将文件作为第一个参数的 open 函数。但是当我调用这个函数时,它没有显示我的PDF。

我知道 you can use the file parameter in the URL 让查看器根据文件路径显示文件。但是我正在从服务器端 REST API 调用中检索这些文件,所以我没有路径,只有 base64。是否有可靠的方法让最新版本的查看器接收和显示 base64?

这原来是浏览器缓存问题。清除缓存给了我最新的 PDF.js 库版本,我能够在查看器中查看 PDF。