私はjsPDFを使用していますが、html2canvasを使用していくつかのhtml要素から画像を生成し、.pdfファイルに挿入します。しかし、html2canvasには問題があり、htmlからぼやけた画像を生成します。以下の例を参照してください。
HTMLコンテンツ:
html2canvasが生成した画像:
それを修正する方法はありますか、または画像フォームhtmlを取得するより良いオプションがありますか?
ありがとう!
私は問題を発見しました。私の画面はRetinaディスプレイであるため、canvas2htmlがHTMLをレンダリングすると、Retina画面のピクセル密度の違いにより、画像がぼやけて表示されます。
ここで解決策を見つけました:
https://github.com/cburgmer/rasterizeHTML.js/blob/master/examples/retina.html
html2canvasでscaleオプションを使用できます。
最新リリースのv1.0.0-alpha.1では、スケールオプションを使用して解像度を上げることができます(スケール:2はデフォルトの96dpiから解像度を2倍にします)。
// Create a canvas with double-resolution.
html2canvas(element, {
scale: 2,
onrendered: myRenderFunction
});
// Create a canvas with 144 dpi (1.5x resolution).
html2canvas(element, {
dpi: 144,
onrendered: myRenderFunction
});
網膜ディスプレイを使用していたため、この問題が発生しました。 MisterLambのソリューションはこちら を使用して解決しました。
$(window).load(function () {
var scaleBy = 5;
var w = 1000;
var h = 1000;
var div = document.querySelector('#screen');
var canvas = document.createElement('canvas');
canvas.width = w * scaleBy;
canvas.height = h * scaleBy;
canvas.style.width = w + 'px';
canvas.style.height = h + 'px';
var context = canvas.getContext('2d');
context.scale(scaleBy, scaleBy);
html2canvas(div, {
canvas:canvas,
onrendered: function (canvas) {
theCanvas = canvas;
document.body.appendChild(canvas);
Canvas2Image.saveAsPNG(canvas);
$(body).append(canvas);
}
});
});
これは私のためにそれを修正したものです。それは、網膜ディスプレイを使用していたからではありませんでした(私は持っていないので):
https://github.com/niklasvh/html2canvas/issues/576
Html2canvas.jsのgetBounds()メソッドを次のように変更するだけです:
function getBounds (node) {
if (node.getBoundingClientRect) {
var clientRect = node.getBoundingClientRect();
var width = node.offsetWidth == null ? clientRect.width : node.offsetWidth;
return {
top : Math.floor(clientRect.top),
bottom: Math.floor(clientRect.bottom || (clientRect.top + clientRect.height)),
right : Math.floor(clientRect.left + width),
left : Math.floor(clientRect.left),
width : width,
height: node.offsetHeight == null ? clientRect.height : node.offsetHeight
};
}
return {};
}