3
        html2canvas($("#Element"), {
  onrendered: function(canvasq) {
    var w=window.open();
    w.document.write("<h3 style='text-align:center;'>"+ReportTitle+"</h3>");
    w.document.write("<img width='100%' height:'90%' src='"+canvasq.toDataURL()+"' />");
    w.print();
  }
});

我想提高 canvasq.toDataURL() 的质量。有什么方法吗?因为返回的数据质量低。

4

3 回答 3

7

简短回答:
将图像大小设置为原始大小的 1/3。

长答案:
您网站上图像的打印质量为 72dpi。

当您尝试打印页面时,所有文本都呈现为高质量矢量(通常为 ~300dpi,具体取决于您的打印设置)。

因此,如果您需要打印出高质量的图像,则需要将其至少缩小到原始尺寸的三分之一。

当您使用 html2canvas 库生成图像时,您必须在渲染之前将所有 CSS 大小设置为 300%。

所以考虑一下:

var ReportTitle = 'Hello world!';  // For demonstration

var bigCanvas = $("<div>").appendTo('body');  // This will be the 3x sized canvas we're going to render
var scaledElement = $("#Element").clone()
.css({
  'transform': 'scale(3,3)',
  'transform-origin': '0 0'
})
.appendTo(bigCanvas);

var oldWidth = scaledElement.width();
var oldHeight = scaledElement.height();

var newWidth = oldWidth * 3;
var newHeight = oldHeight * 3;

bigCanvas.css({
  'width': newWidth,
  'height': newHeight
})

html2canvas(bigCanvas, {
  onrendered: function(canvasq) {
    var w=window.open();
    w.document.write("<h3 style='text-align:center;'>"+ReportTitle+"</h3>");
    w.document.write("<img width='"+oldWidth+"' height='"+oldHeight+"' src='"+canvasq.toDataURL()+"' />");
    w.print();
    bigCanvas.remove() 
  }
});

工作 JSBin 链接

于 2013-08-19T18:04:42.947 回答
2

使用 css scale 的方法是正确的。

首先我们需要放大元素,然后在“html2canvas”回调中缩小它。

var ELEMENT = jQuery("#ELEMENT");

//get element width and height
var w = ELEMENT.width();
var h = ELEMENT.height();

//scale up your element
ELEMENT.css({
'transform': 'scale(3)',
'-ms-transform': 'scale(3)',
'-webkit-transform': 'scale(3)' });

//run html2canvas
html2canvas(ELEMENT, {
onrendered: function(canvas) {

//scale back your element
ELEMENT.css({
'transform': '',
'-ms-transform': '',
'-webkit-transform': '' });

//your actions to canvas
var win = window.open();
win.document.write('<h3 style="text-align:center;">ttl</h3>');
win.document.write('<img width="100%" height:"90%" src="'+canvas.toDataURL()+'"/>');
win.print();


},
//set proper canvas width and height
width: w*3,
height: h*3
});
于 2015-09-23T15:44:36.817 回答
2

您可以在 html2canvas 中使用缩放选项。

在最新版本 v1.0.0-alpha.1 中,您可以使用 scale 选项来提高分辨率(scale: 2 将使分辨率从默认的 96dpi 提高一倍)。

// Create a canvas with double-resolution.
html2canvas(element, {
    scale: 2,
    onrendered: myRenderFunction
});
于 2018-09-28T07:10:30.443 回答