簡體   English   中英

使用Internet Explorer 10及更低版本保存Base64編碼的PDF

[英]Saving Base64 encoded PDF with Internet Explorer 10 and below

我最近開始使用Bootstrap Table及其導出插件 我遇到的一個問題是導出插件不適用於IE,因為文件是使用數據URI輸出的,而IE不支持該數據URI(我認為我讀過IE 11支持它,但是我的組織中沒有人使用它) IE11。)

我對導出感興趣的唯一文件類型是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,那么我將使用在此處找到的代碼。 這對於MS文件類型非常有用,但是當我嘗試對PDF文件執行相同操作時,它將嘗試另存為.htm文件。 該文件為空。 如果在我的代碼中將fileExtension變量替換為.pdf,則單擊導出時將不會顯示“另存為”窗口。 沒有javascript錯誤。

我將embed標簽的src屬性設置為插件javascript返回的字符串,如下所示: 'application/pdf;base64,' + Base64.encode(buffer)

任何人都知道任何解決方案/解決方法嗎?

我知道這是一個非常老的問題,但是我找到了解決方案,並且想與任何遇到相同問題的人分享。 您可以在此處查看演示: 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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM