【发布时间】:2021-02-19 11:31:11
【问题描述】:
我正在尝试创建一个迷你应用程序(在 Salesforce 中,尽管这可能不那么相关),它将 PDF.js 中的开箱即用 viewer.html 嵌入 iframe 中。用户从列表中选择一个 PDF,应用程序会检索该 PDF 的 base64 并将其传递给查看器。
有一些工作示例使用了pre-built PDF.js 的过时版本,包括this one 和uses 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