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"を設定しました。また、しかし、まだそれは仕事ではありません。