Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Internet Explorer 10及以下版本保存Base64编码的PDF_Javascript_Internet Explorer_Pdf Generation - Fatal编程技术网

Javascript 使用Internet Explorer 10及以下版本保存Base64编码的PDF

Javascript 使用Internet Explorer 10及以下版本保存Base64编码的PDF,javascript,internet-explorer,pdf-generation,Javascript,Internet Explorer,Pdf Generation,我最近开始使用和为它。我遇到的一个问题是,导出插件不适用于IE,因为文件是使用数据URI输出的,IE不支持数据URI(我想我读到IE11支持它,但我的组织中没有人使用IE11) 我唯一感兴趣的导出文件类型是Microsoft office类型(Word、Excel)和PDF。 我已经为MS文件创建了一个有效的解决方案 if (supportsDataUriNavigation()) window.open('data:application/vnd.ms-' + defaults.t

我最近开始使用和为它。我遇到的一个问题是,导出插件不适用于IE,因为文件是使用数据URI输出的,IE不支持数据URI(我想我读到IE11支持它,但我的组织中没有人使用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文件。这个文件是空白的。如果在代码中用.pdf替换fileExtension变量,则单击导出时将不会显示“另存为”窗口。没有javascript错误

我将嵌入标记的src属性设置为插件javascript返回的字符串,如下所示:
'application/pdf;base64,“+base64.编码(缓冲区)


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

我知道这是一个非常古老的问题,但我找到了解决方案,我想与有相同问题的人分享。您可以在此处看到演示:

“严格使用”;
var data=“…您的PDF base64字符串…”;
var fileName=“您的文件名”;
if(window.navigator&&window.navigator.msSaveOrOpenBlob){//IE解决方法
var byteCharacters=atob(数据);
var byteNumbers=新数组(byteCharacters.length);
for(变量i=0;i

我在解决方案中看到的链接:

我知道这很古老,但我遇到了同样的问题,试图在IE9中保存jsPdf创建的PDF。显然只有.txt和.htm文件可以工作:IE是什么版本?这是<10的“假”。。。window.navigator.msSaveOrOpenBlob
'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");
}