vue中,html2canvas 截图table不全的问题
iview-table
本身自带的滚动条,最外层获取不到最大的宽度,需要在下载的时候获取table
的ivu-table-tbody
宽度,然后赋值给table
。
点击download_canvas_image
就可以下载图片了,如果不需要在页面上展示,就把代码放开直接就能下载 了
<template>
<div id='tableId'>
<Button type="primary" @click='downImg'>下载为图片</Button>
<Table class='ivuTableWrapper' style="width:550px;" border :columns="columns2" :data="data3"></Table>
</div>
</template>
<script>
import html2canvas from 'html2canvas';
export default {
name: 'App',
data () {
return {
columns2: [
{
title: 'Name',
key: 'name',
width: 100,
fixed: 'left'
},
{
title: 'Age',
key: 'age',
width: 100
},
{
title: 'Province',
key: 'province',
width: 100
},
{
title: 'City',
key: 'city',
width: 100
},
{
title: 'Address',
key: 'address',
width: 200
},
{
title: 'Postcode',
key: 'zip',
width: 100
},
{
title: 'Action',
key: 'action',
width: 120,
render: (h, params) => {
return h('div', [
h('Button', {
props: {
type: 'text',
size: 'small'
}
}, 'View'),
h('Button', {
props: {
type: 'text',
size: 'small'
}
}, 'Edit')
]);
}
}
],
data3: [
{
name: 'John Brown',
age: 18,
address: 'New York No. 1 Lake Park',
province: 'America',
city: 'New York',
zip: 100000
},
{
name: 'Jim Green',
age: 24,
address: 'Washington, D.C. No. 1 Lake Park',
province: 'America',
city: 'Washington, D.C.',
zip: 100000
},
{
name: 'Joe Black',
age: 30,
address: 'Sydney No. 1 Lake Park',
province: 'Australian',
city: 'Sydney',
zip: 100000
},
{
name: 'Jon Snow',
age: 26,
address: 'Ottawa No. 2 Lake Park',
province: 'Canada',
city: 'Ottawa',
zip: 100000
}
],
}
},
methods: {
downImg(){
let that = this;
var oDiv = document.getElementsByClassName('ivuTableWrapper')[0];
var aaa = document.getElementsByClassName('ivu-table-tbody')[0];
oDiv.style.width = aaa.offsetWidth;
oDiv.style.cssText = `width: ${aaa.offsetWidth}`;
html2canvas(oDiv, {
useCORS: true, //支持图片跨域
scale: 1, //设置放大的倍数
height: oDiv.scrollHeight, //canvas高
width: oDiv.scrollWidth, //canvas宽
windowHeight: oDiv.scrollHeight,
windowWidth: oDiv.scrollWidth,
})
.then((canvas) => {
/**** 直接下载图片--代码
// const a = document.createElement('a');
// a.href = canvas.toDataURL('image/png');
// a.download = '关注指标';
// a.click();
***/
//显示在页面再点击下载
document.getElementById('tableId').appendChild(canvas);
var oCavans = document.getElementsByTagName('canvas')[0];
var strDataURI = oCavans.toDataURL();
that.downLoadFn(strDataURI);
})
},
downLoadFn(strDataURI) {
var link = document.createElement('a');
link.innerHTML = 'download_canvas_image';
link.download = 'img.png';
link.addEventListener('click', function(ev) {
link.href = strDataURI;
}, false);
document.body.appendChild(link);
}
},
mounted() {
}
}
</script>
注意:如果图片没有展示全,需要设置一下
scrollY
,scrollX
的值,根据图片的位置,正负值都可以
想了解更多关于html2canvas的问题,可以看下这篇文章 https://www.zhihu.com/question/265838834