【问题标题】:PDF.js: using postMessage to pass base64 to viewer.html in iframePDF.js:使用 postMessage 将 base64 传递给 iframe 中的 viewer.html
【发布时间】:2021-02-19 11:31:11
【问题描述】:

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

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

  • Embed the viewer 在 iframe 中,use postMessage 将 base64 传递给查看器
  • viewer.html中,添加了以下脚本来接收和处理消息事件:
<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?

【问题讨论】:

  • 感谢分享。坐在同一个 Salesforce 船上,想知道旧的方法与当前的事态。节省时间!

标签: javascript pdf pdfjs


【解决方案1】:

这原来是浏览器缓存问题。清除缓存为我提供了最新的 PDF.js 库版本,我可以在查看器中查看 PDF。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-30
    • 2012-06-11
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多