2014-11-26 2 views
1

Я недавно начал использовать Bootstrap Table и export plugin. Проблема, с которой я столкнулся, заключается в том, что плагин экспорта не работает для IE, потому что файлы выводятся с использованием URI данных, который IE не поддерживает (я думаю, что я читал, что IE 11 поддерживает его, но никто в моей организации не использует IE 11, конечно.).Сохранение в формате Base64 в формате PDF с помощью Internet Explorer 10 и ниже

Единственными файлами, которые меня интересуют, являются типы офисных офисов Microsoft (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 нет.

Я установил атрибут ГКЗ с вставлять тег в строку, которая возвращается в плагин JavaScript, и это выглядит так: 'application/pdf;base64,' + Base64.encode(buffer)

Любое знает любого решения/обходной путь?

+0

Я знаю, что это древний, но я бегу в том же номере, пытаясь спасти jsPdf- созданный PDF в IE9. Видимо, только файлы .txt и .htm работают: http://stackoverflow.com/a/2516054/865967 – cscott530

ответ

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/

+0

Для IE какая версия? Это значение «false» для <10 ... window.navigator.msSaveOrOpenBlob –