[英]Download PDF base64 - Internet Explorer - Not asking to save
[英]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.