HTML5キャンバスをJavaScriptでPDFに変換しようとしていますが、背景が黒のPDFになります。背景色を変更しようとしましたが、それでも黒になります。次のコードを試しています。
Canvas = document.getElementById("chart");
Context = Canvas.getContext("2d");
var imgData = Canvas.toDataURL('image/jpeg');
var pdf = new jsPDF('landscape');
pdf.addImage(imgData, 'JPEG', 0, 0, 1350, 750);
pdf.save('download.pdf');
何かアイデアがありましたら、よろしくお願いします。
良いアプローチは、jspdf.jsとhtml2canvasの組み合わせを使用することです。私はあなたのためにjsfiddleを作りました。
<canvas id="canvas" width="480" height="320"></canvas>
<button id="download">Download Pdf</button>
'
html2canvas($("#canvas"), {
onrendered: function(canvas) {
var imgData = canvas.toDataURL(
'image/png');
var doc = new jsPDF('p', 'mm');
doc.addImage(imgData, 'PNG', 10, 10);
doc.save('sample-file.pdf');
}
});
jsfiddle: http://jsfiddle.net/rpaul/p4s5k59s/5/
非常に簡単な解決策の1つは、画像をjpegとして保存することです。代わりに、pngとして保存すると、私のアプリケーションでは問題なく機能します。注目すべきことに、 Blizzard の応答には、pngとしての印刷も含まれ、キャンバス内の透明なレイヤーに黒以外の塗りつぶしも生成されます。
var canvas = event.context.canvas;
var data = canvas.toDataURL('image/png');
の代わりに
var canvas = event.context.canvas;
var data = canvas.toDataURL('image/jpg');
私は同じ問題を抱えていました、例えば初めてPDFを作成したときは、キャンバスの画像は問題ありませんが、次はすべて黒くなりました。写真はありません!
私が見つけた回避策は次のとおりです。pdf.addImage()を呼び出すたびに、キャンバスに画像を再描画します。今では問題なく動作します。
編集:要求に応じて、ここにいくつかの詳細があります:
私がこのようなキャンバス描画機能を持っているとしましょう(単なる例、それは問題ではありません):
function drawCanvas(cv) {
for(var i=0; i<cv.height; i++) {
for(var j=0, d=0; j<cv.width; j++) {
cv.data[d] = 0xff0000;
d += 4;
}
}
}
印刷機能を次のように修正する必要がありました。
var cv=document.getElementById('canvas');
printPDF(cv) {
var imgData=cv.toDataURL("image/jpeg", 1.0);
var doc=new jsPDF("p","mm","a4");
doc.addImage(imgData,'JPEG',15,40,180,180);
drawCanvas(cv); // <--- this line is needed, draw again
}
drawCanvas(cv); // <--- draw my image to the canvas, ok
printPDF(cv); // first time is fine
printPDF(cv); // second time without repaint would be black
私は認めます、私はこれ以上調査しませんでした、これがうまくいくことをただ嬉しく思います。
まず、canvas
を取得する前に、data
で目的の背景色をsetする必要があります。次に、jpeg
にcanvas
画像を描画する必要があります。
JPEGをPNGに変更するだけですpdf.addImage(imgData、 'PNG'、0、0、1350、750);