html2canvas手机清晰度,html2canvas图片清晰度

事实上我发现高度不用处理

b83e81e33000ad9a88a0c992bbc96af3.png

在一个烦躁的时刻,突然要实现一个打印功能,最后决定生成图片打印~

结果图片果然不清晰(放心早知道有这个坑了~),

d8655cc58b78fbec4d8e7ef5786d3176.png

说了比较烦躁,网上教程也静不下来心看,依稀看到说生成canvas时,进行放大,

766802bf83adb26168a3ed93e7f86133.png

然后就放大scale倍呗,恩,然后就成了。。。

b701b3c56e19d6a803b9d9feacd71340.png

理论上清晰度、生成时长与scale成正比·

事后,看了看这篇文章,https://segmentfault.com/a/1190000011478657

与大多数教程一样,不知为什么要创建canvas,给html2canvas使用,也许有隐藏彩蛋,这得我看了文档之后才能知道。

f5b809ddd463354833125d3df45fa0a0.png

理论上这个有用,我也复制到自己的代码里了~

在新窗口打印,并删除iframe,因为print是个同步操作,所以关闭print面板之后才能看到iframe节点被删除

methods: {

print() {

const dom = this.$refs['order'];

const scale = 3;

html2canvas(this.$refs['order'], {

scale,

width: dom.offsetWidth * scale,

height: dom.offsetHeight * scale,

}).then(canvas => {

const context = canvas.getContext('2d');

// 【重要】关闭抗锯齿 https://segmentfault.com/a/1190000011478657

context.mozImageSmoothingEnabled = false;

context.webkitImageSmoothingEnabled = false;

context.msImageSmoothingEnabled = false;

context.imageSmoothingEnabled = false;

//处理canvas,例如加水印

//完成canvas

const src64 = canvas.toDataURL();

this.print2(src64, canvas, scale);

});

},

print2(src64, canvas, scale) {

const iframe = document.createElement('iframe');

iframe.id = 'order' + this.order.id;

document.body.appendChild(iframe);

iframe.contentWindow.document.write(`

const oid = ${this.order.id};

function main(){

window.print();

window.parent.window.document.body.removeChild(window.parent.window.document.getElementById('order' + oid));

}

<\/script>

${src64}`);

},

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值