vue-print-nb使用
- 安装 vue-print-nb
npm install vue-print-nb --save
- 在main.js中引入
import Print from 'vue-print-nb'
Vue.use(Print)
- 使用 vue-print-nb
<el-button v-print="printObj">打印</el-button>
printObj: {
id: 'print',
popTitle: '',
extraCss: '',
... ...
},
<div id="print">这块内容将会被打印</div>
解决打印element表格不全问题
- 因为需要修改源码,所以直接拷贝以下文件,放到项目的assets目录下(将node_modules/vue-print-nb/print文件拷贝至项目中,不一定要assets目录,想放哪放哪,下面在main.js中引入的时候填写对应路径即可)

- 在main.js中引入(之前在main.js中引入的vue-print-nb可以去掉了)
import Print from './assets/print'
Vue.use(Print)
- 在assets目录中的print文件夹下找到print.js修改代码,添加beforeEntryIframe钩子
new Print({
ids: id,
vue,
url: binding.value.url,
standard: '',
extraHead: binding.value.extraHead,
extraCss: binding.value.extraCss,
previewTitle: binding.value.previewTitle || '打印预览',
zIndex: binding.value.zIndex || 20002,
previewPrintBtnLabel: binding.value.previewPrintBtnLabel || '打印',
popTitle: binding.value.popTitle,
preview: binding.value.preview || false,
asyncUrl: binding.value.asyncUrl,
beforeEntryIframe(){
binding.value.beforeEntryIframe && binding.value.beforeEntryIframe(vue)
},
previewBeforeOpenCallback () {
binding.value.previewBeforeOpenCallback && binding.value.previewBeforeOpenCallback(vue)
},
previewOpenCallback () {
binding.value.previewOpenCallback && binding.value.previewOpenCallback(vue)
},
openCallback () {
binding.value.openCallback && binding.value.openCallback(vue)
},
closeCallback () {
binding.value.closeCallback && binding.value.closeCallback(vue)
},
beforeOpenCallback () {
binding.value.beforeOpenCallback && binding.value.beforeOpenCallback(vue)
}
});
- 在assets目录中的print文件夹下找到printarea.js修改代码,添加一行代码以触发上方的beforeEntryIframe函数
getBody () {
let ids = this.settings.ids;
ids = ids.replace(new RegExp("#", "g"), '');
this.settings.beforeEntryIframe();
this.elsdom = this.beforeHanler(document.getElementById(ids));
let ele = this.getFormData(this.elsdom);
let htm = ele.outerHTML;
return '<body>' + htm + '</body>';
}
- 在使用vue-print-nb的页面中修改printObj对象(上面的vue-print-nb使用步骤3)
printObj: {
id: 'print',
popTitle: '',
extraCss: '',
beforeEntryIframe () {
const cells = document.querySelectorAll('.cell')
const tableNode = document.querySelectorAll('.el-table__header,.el-table__body')
for (let j = 0; j < tableNode.length; j++) {
const tableItem = tableNode[j]
tableItem.style.width = '100%'
const child = tableItem.childNodes
for (let i = 0; i < child.length; i++) {
const element = child[i]
if (element.localName === 'colgroup') {
element.innerHTML = ''
}
}
}
for (let i = 0; i < cells.length; i++) {
const cell = cells[i]
cell.style.width = '100%'
cell.removeAttribute('style')
}
}
},
- 改完后运行代码,查看打印效果,一行放不下时文字会做换行处理
