2017-09-22 3 views
0

ハイチャートチャートを書き出してjsでメールとして送信しようとしています。これを行うには、html2canvasライブラリを使用してjspdfオブジェクトに追加しました。クロムとFirefoxですべてうまくいったが、IEでこれを行うと空のpdfが現れた。 擬似コード:ハイチャートチャートのhtml2canvasがIE上でうまく機能しない

var 
    form = $('#main-content'), 
    cache_width = form.width(), 
    a4 = [100, 100]; 
    var canvas1 = html2canvas(form, { 
     imageTimeout: 6000, 
     removeContainer: true 
    }); 
    canvas1.then(function (canvas) { 

     var 
     img1 = canvas.toDataURL("image/JPEG", 1.0); 

     doc.addImage(img1, 'PNG', 0, 50, 440, 300); 

    }); 



    Promise.all([canvas1]).then(function() { 

     var pdfString = window.btoa(doc.output()); 
     var ob = {}; 
     ob.mail = mailsList; 
     ob.title = title; 
     ob.pdf = pdfString; 

     $.ajax({ 
      type: 'POST', 
      url: "/Charts/SendChart_ByEmail", 
      data: JSON.stringify(ob) 
     }); 

IE iが外部ライブラリ(bluebird.js)を使用するが、チャートを含むDIVをレンダリングするとき、結果のPDFファイルが空である、しかし、私は、別のレンダリングしようとした約束をサポートしていないためそれが働いたチャートを含んでいないdiv。

ハイチャートのバグですか?ブルーバードの問題?任意の回避策?

+0

は、この問題が発生する完全に動作する例を私たちに提供します。ありがとう。 –

+0

問題はajaxリクエストに送られるpdf文字列です.IE上で作業する場合、pdf文字列の長さは20KBですが、クロム文字列の長さは約300kbです。私はこれが空のpdfにつながったと考えています。チャートがキャンバスに完全にエクスポートされていないからです。 @d_paul –

+0

問題はcanvas.todatauriからのもので、生成される画像は空のdivで、チャートは含まれていません –

答えて

0

問題はdiv要素はSVGが含まれている場合canvas.todatauriはIEで動作しないということでした、ありがとうございました。 はので、私は.. canvasgを使用することにより、上記のコードを置き換える:

var chart = $('#main-content').highcharts(); 
     var svg = chart.getSVG({ 
      exporting: { 
       sourceWidth: chart.chartWidth, 
       sourceHeight: chart.chartHeight 
      } 
     }); 
     var mycanvas = document.createElement('canvas'); 
     canvg(mycanvas, svg); 
     var imgtest = mycanvas.toDataURL("image/JPEG"); 
     doc.addImage(mycanvas.toDataURL("image/JPEG"), 'PNG', 0, 50, 440, 300); 
関連する問題