vue 使用print-js

前言

只要有软件的开发就会有管理后台的开发,然而就现在很多管理后台都是需要打印功能的,其实也有那种前端生成pdf的需求,但总的来说,个人还是觉得用打印里面的“另存为PDF”比较香。

我这里使用的是print-js官网

  • 优点:可打印多种格式内容(pdf、json、html、image),默认类型为pdf。打印json时可以添加表头。打印html页时可以继承原有页面的样式,可以局部打印,过滤掉要打印的元素。

那么打印怎么实现呢?请接着往下看

安装

npm install print-js --save

引入

在main.js文件里面引入

import Print from 'vue-printjs'

Vue.use(Print)

使用

我这里是简单的举例,就没有写样式,如果需要不被打印,那么就在元素上加上no-print的类就可以啦!

<div ref="print">
	<p>需要打印的内容</p>
	<p class="no-print">不需要被打印</p>
</div>
 <el-button size="small" type="primary" class="btn" @click="print">打印</el-button>
 // 打印
  print() {
      this.$print(this.$refs.form)
  },

我这是最简单的用法了,官方介绍更全哦,可以去官网看看更多使用类型个方法

### 解决 Vue 中 `print-js` 打印表格时显示线条样式的方案 当使用 `print-js` 进行打印操作时,如果遇到表格边框无法正常显示的情况,主要原因是默认情况下打印机或浏览器的打印预览功能并不会保留页面上的原有样式[^1]。为了确保表格中的边界能够被正确渲染,在执行打印命令前需通过自定义CSS来强制应用所需的样式。 #### 方法一:全局覆盖样式 可以在项目的公共样式文件中加入针对打印环境特化的样式规则: ```css @media print { .custom-table th, .custom-table td { border: 1px solid black !important; } } ``` 此方法适用于整个应用程序内的所有表格组件,并且只需设置一次即可生效于所有的打印任务。 #### 方法二:局部调整特定实例 对于仅希望影响某个具体位置下的表格,则可以采用内联方式或是更精确的选择器来进行针对性处理: ```html <template> <div id="printableArea"> <!-- 假设这是你要打印的内容 --> <table class="local-custom-table"> ... </table> </div> </template> <style scoped> .local-custom-table th, .local-custom-table td{ border: 1px solid black!important; } /* 或者 */ #printableArea table tr td, #printableArea table tr th { border: 1px solid black !important; } </style> ``` 这种方法允许开发者灵活控制哪些部分应该受到新样式的约束而不干扰其他区域的表现形式。 #### 方法三:利用插件特性解决 考虑到题目提到的是基于Element UI框架构建的应用程序以及选择了`vue-print-nb`作为辅助工具的事实,还可以尝试借助该库提供的钩子函数机制实现动态修改目标DOM节点属性的目的[^3]。例如,在调用打印API之前先遍历待打印区域内所有的单元格并为其添加必要的class名称或者直接设定inline-style属性值。 ```javascript import Print from 'vue-print-nb' methods:{ handlePrint(){ const cols = document.querySelectorAll('.el-table__body-wrapper col'); Array.prototype.forEach.call(cols,(item)=>{ item.style.width='auto';//或其他合适的宽度计算逻辑 }); this.$nextTick(() => { // 确保dom更新完成再触发打印行为 Print({ printable:'yourTableId', type:'html'}); }); } } ``` 上述代码片段展示了如何在实际开发过程中结合JavaScript与HTML结构特点巧妙地解决了由于布局差异所引起的视觉效果缺失问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

守望黑玫瑰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值