官方未支持打印功能,因此基于vue-print-nb
开发打印功能的过程如下:
导入依赖
1
| npm install vue-print-nb --save
|
打印方法
1 2 3 4 5 6 7 8 9 10 11 12
| handlePrint() { let RowColumn = this.getExcelRowColumn() RowColumn.column[0] = 0 luckysheet.setRangeShow(RowColumn) let src = luckysheet.getScreenshot(); let $img = `<img src=${src} style="max-width: 100%;" alt=""/>` this.$nextTick(() => { document.querySelector('#luckysheet').innerHTML = $img; }) },
|
这里如果不识别出有内容的区域,则打印的时候会将整个表格打印出来,这样如果内容部分比较少,那么打印的效果会非常不好。因此首先需要自动识别有内容的区域边界。
然后使用luckysheet.getScreenshot
方法获取选区(有内容的选区)截图。
最后使用document.querySelector('id')
将图片数据赋值过去,这里一定要将’id’值指定清楚。
其中,自动识别方法getExcelRowColumn
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| getExcelRowColumn() { const sheetData = luckysheet.getSheetData(); let objRowColumn = { row: [null, null], column: [null, null], }; sheetData.forEach((item, index) => { item.forEach((it, itemIndex) => { if (it !== null) { if (objRowColumn.row[0] == null) objRowColumn.row[0] = index; objRowColumn.row[1] = index; if (objRowColumn.column[0] == null) objRowColumn.column[0] = itemIndex; objRowColumn.column[1] = itemIndex; } }); }); return objRowColumn; },
|
方法定义完后,再定义按钮:
1 2 3 4 5 6 7 8 9 10
| <el-button plain type="warning" icon="el-icon-printer" size="mini" @click="handlePrint" v-print="'#luckysheet'" v-hasPermi="['template:sheet:print']" >打印 </el-button>
|
注意,这里就需要使用v-print
绑定对应的id。
效果