【问题标题】:Open pdf.js with a data URL in IE11在 IE11 中打开带有数据 URL 的 pdf.js
【发布时间】:2019-01-04 16:44:47
【问题描述】:

我正在尝试使用 pdf.js 在 IE10 上的数据 URL 中显示文档。即something like this

它适用于 Firefox 或 Chrome,但在 Internet Explorer 10 和 11 中,界面会显示,但保持空白,并且永远不会加载文档。

我检查了,compatibility.js 包含在渲染器页面(viewer.html)中,所以应该存在 IE 支持。

编辑:实际上这是一个安全问题,因为 IE 不允许运行这种类型的请求。

提前致谢,

【问题讨论】:

  • 将您的数据 URL 转换为字节数组并使用 PDFViewerApplication.open 打开?
  • 请记住,IE 也会截断长 URL,因此您的 base64 编码 PDF 可能会损坏。

标签: javascript internet-explorer-10 pdf.js


【解决方案1】:

好的,如果有人遇到同样的问题,我通过绕过 lib 的正常加载路径来解决它,并按照 async5 的建议,直接将数据转换为字节数组。

也就是说,在 viewer.js 中,将这些行添加到第 6856 行:

  if (file && file.lastIndexOf('data:', 0) === 0) {
      // data: url-scheme. we will load those with direct conversion to byte array

      function convertDataURIToBinary(dataURI) {
          var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;
          var base64 = dataURI.substring(base64Index);
          var raw = window.atob(base64);
          var rawLength = raw.length;
          var array = new Uint8Array(new ArrayBuffer(rawLength));

          for(var i = 0; i < rawLength; i++) {
              array[i] = raw.charCodeAt(i);
          }
          return array;
      }

      // PDFViewerApplication.setTitleUsingUrl(file);
      PDFViewerApplication.open(convertDataURIToBinary(file), 0);

      return;
  }

(base64转字节数组代码是Codetoffelhere发布的那个)

【讨论】:

  • 本例中的 PDFViewerApplication 是什么?...adobe reader?
  • 不,它是 pdf.js 内部的一个类
  • 是否有任何其他解决方法可以使用 pdf.js 使其在 IE11 中运行?...我的意思是,仅支持 IE 的开销太大:(
  • 您确实可以在外部应用程序、Adobe 或 Window 的阅读器应用程序中打开 PDF。
猜你喜欢
  • 1970-01-01
  • 2014-08-20
  • 1970-01-01
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多