2017-06-16 18 views
0

JSONを使用してチャートの描画の詳細をアプリケーションに作成します。そのグラフをpng/pdfとして保存します。このコードは -IE11でファイルをダウンロード

function ExportPdfAndSaveChart(id, title, type, downLoadFile, selectedProject) { 
     var dateForFileName = getfileDateForName(); 
     downLoadFile = downLoadFile + "_" + dateForFileName; 
     //code to convert image from svg to canvas 
     var html = d3.select(id).select("svg") 
      .attr("version", 1.1) 
      .attr("xmlns", "http://www.w3.org/2000/svg") 
      .node().parentNode.innerHTML; 

     var imgsrc = 'data:image/svg+xml;base64,' + btoa(html); 
     var img = '<img src="' + imgsrc + '">'; 
     d3.select("#svgdataurl").html(img); 
     var iDiv = document.createElement('div'); 
     iDiv.id = 'block'; 
     document.getElementsByTagName('body')[0].appendChild(iDiv); 
     var innerDiv = document.createElement('canvas'); 
     iDiv.appendChild(innerDiv); 
     var canvas = document.querySelector("canvas"), 
      context = canvas.getContext("2d"); 
     canvas.width = 800; 
     canvas.height = 1130; 
     context.font = "30px Arial"; 
     context.textAlign = 'center'; 
     context.fillStyle = '#fff'; 
     context.fillRect(0, 0, canvas.width, canvas.height); 
     var image = new Image(); 
     image.crossOrigin = "Anonymous"; 
     image.src = imgsrc; 
     image.onload = function() { 
      context.drawImage(image, 100, 200); 
      context.fillStyle = "Black"; 
      context.rect(10, 10, 772, 1100); 
      context.stroke(); 
      context.strokeStyle = 'blue'; 
      context.lineWidth = 5; 
      context.fillText(title, 380, 50); 
      context.font = "20px Arial"; 
      context.textAlign = 'center'; 
      context.fillText(selectedProject, 380, 80); 
      var canvasdata = canvas.toDataURL("image/png");/*"image/png", 1, 0*/ 
      //type=1 is for export pdf else for png 
      if (type == 1) { 
       pdf = new jsPDF('p', 'mm', [297, 210]); 
       pdf.setFontSize(40); 
       pdf.addImage(canvasdata, 'png', 0, 0); 
       pdf.save(downLoadFile + ".pdf"); 
      } else { 
       var pngimg = '<img src="' + canvasdata + '">'; 
       d3.select("#pngdataurl").html(pngimg); 
       var a = document.createElement("a"); 
       document.body.appendChild(a); 
       a.download = downLoadFile + ".png"; 
       a.href = canvasdata; 
       a.click(); 
      } 
     }; 
    } 

です。このコードはchrome/firefoxで完全に実行されます。しかし、IEでライン上でエラーを与える - var canvasdata = canvas.toDataURL( "image/png");エラーはです。SecurityError

このため、私はimage.crossOrigin = "Anonymous"を設定しました。また、しかし、まだそれは仕事ではありません。

答えて

0

私は(私の場合はPDFファイルを、と)同様の問題でつまずいて、このようにそれを解決:このビットに

$http.get('/webclientes/api/policies/getPlanFile/OLAS&&CG247S2501.pdf', { 

    $http.get('/webclientes/api/policies/getPlanFile/'+datos, { 
    responseType: 'blob' 
    }) 
    .success(function(data, response) { 

     vm.errorNoExistePDF = true; 
     var file = new Blob([data], { 
     type: 'application/pdf' 
     }); 
     var fileURL = URL.createObjectURL(file); 

     if ($window.navigator && $window.navigator.msSaveOrOpenBlob) { 

      $window.navigator.msSaveOrOpenBlob(file); 
     }else 

      $window.open(fileURL); 
     }) 
    .error (function(data){ 
     console.log("ERROR"); 
     vm.errorNoExistePDF = true; 
    }); 
}); 

ご注意:

if ($window.navigator && $window.navigator.msSaveOrOpenBlob) { 

      $window.navigator.msSaveOrOpenBlob(file); 
関連する問題