使用 Internet Explorer 10 及更低版本保存 Base64 编码的 PDF

Posted

技术标签:

【中文标题】使用 Internet Explorer 10 及更低版本保存 Base64 编码的 PDF【英文标题】:Saving Base64 encoded PDF with Internet Explorer 10 and below 【发布时间】:2015-01-25 02:28:18 【问题描述】:

我最近开始使用Bootstrap Table 和export plugin。我遇到的一个问题是导出插件不适用于 IE,因为文件是使用 IE 不支持的 Data URI 输出的(我想我读到 IE 11 支持它,但我的组织中没有人使用当然是 IE 11。)。

我唯一有兴趣导出的文件类型是 Microsoft Office 类型(Word、Excel)和 PDF。 我已经为 MS 文件创建了一个有效的解决方法。

  if (supportsDataUriNavigation())
    window.open('data:application/vnd.ms-' + defaults.type + ';filename=exportData.doc;' + base64data);
  else 
    var iframe = document.getElementById("dataFrame");
    iframe = iframe.contentWindow || iframe.contentDocument;
    iframe.document.open("text/html", "replace");
    iframe.document.write(excelFile);
    iframe.document.close();
    iframe.focus();

    iframe.document.execCommand("SaveAs", true, defaults.fileName + fileExtension);
  

在这个检查中,如果浏览器是IE,那么我使用我找到的代码here。这对 MS 文件类型非常有用,但是当我尝试对 PDF 文件执行相同操作时,它会尝试另存为 .htm 文件。这个文件是空白的。如果我在代码中将 fileExtension 变量替换为 .pdf,则单击导出时不会显示 SaveAs 窗口。没有 javascript 错误。

我将 embed 标记的 src 属性设置为插件 javascript 返回的字符串,它看起来像这样:'application/pdf;base64,' + Base64.encode(buffer)

有人知道任何解决方案/解决方法吗?

【问题讨论】:

我知道这很古老,但我遇到了同样的问题,试图在 IE9 中保存由 jsPdf 创建的 PDF。显然只有 .txt 和 .htm 文件有效:***.com/a/2516054/865967 【参考方案1】:

我知道这是一个非常老的问题,但我找到了解决方案,我想分享任何有同样问题的人。你可以在这里看到演示: https://jsfiddle.net/quangminh_ln/hy36tnt6/

'use strict';

var data = "...Your PDF base64 string...";
var fileName = "your_file_name";
if (window.navigator && window.navigator.msSaveOrOpenBlob)  // IE workaround
    var byteCharacters = atob(data);
    var byteNumbers = new Array(byteCharacters.length);
    for (var i = 0; i < byteCharacters.length; i++) 
        byteNumbers[i] = byteCharacters.charCodeAt(i);
    
    var byteArray = new Uint8Array(byteNumbers);
    var blob = new Blob([byteArray], type: 'application/pdf');
    window.navigator.msSaveOrOpenBlob(blob, fileName);

else  // much easier if not IE
    window.open("data:application/pdf;base64, " + data, '', "height=600,width=800");

我看到的解决方案链接:https://viethoblog.wordpress.com/2016/08/30/loaddisplay-pdf-from-base64-string-bonus-ie-workaround/

【讨论】:

对于IE什么版本?对于 ,这是“假”

以上是关于使用 Internet Explorer 10 及更低版本保存 Base64 编码的 PDF的主要内容,如果未能解决你的问题,请参考以下文章

对于某些情况,如 Internet Explorer 特定的 CSS 或 Internet Explorer 特定的 JavaScript 代码,如何仅针对 Internet Explorer 10?

Internet Explorer 10 画布剪辑意外行为

Internet Explorer 10 忽略 XMLHttpRequest 'xhr.withCredentials = true'

使用 Internet Explorer 10 及更低版本保存 Base64 编码的 PDF

无法在 Internet Explorer 10 上加载 Google Cloud Endpoints

Internet Explorer 8-10 中的 Selenium WebDriver 窗口切换问题