下面是A4和挂牌的效果图↓↓↓↓↓↓↓。第一步:安装第三方库。_vue3 ">
当前位置:   article > 正文

Vue2/3 实现打印功能 亲测有效_vue3 打印a3

vue3 打印a3

需求 我司有一个需求需要连接热敏打印机和A4打印机 需要前端生成条形码以及连接打印机实现打印功能,如果是A4纸那么实现就很简单。如果纸张不是A4等A系列那么就需要做适配纸张。

打印我只推荐Vue-print-nb这个库 其他库都有兼容性问题

如果有打印中条形码功能一定要阅读这篇文章http://t.csdnimg.cn/QpzPo

下图就是我司连接热敏打印机的所用到的纸张大小 吊牌类型纸张(面积很小)A4很简单这就不提了

第一步:安装第三方库

Vue2.0版本安装方法:

  1. npm install vue-print-nb --save
  2. yarn add vue-print-nb
Vue3.0版本安装方法:
  1. npm install vue3-print-nb --save
  2. yarn add vue3-print-nb

第二步:全局挂载

Vue2.0引入方式:

  1. import Print from 'vue-print-nb'
  2. Vue.use(Print)

Vue3.0引入方式:

  1. import Print from 'vue3-print-nb'
  2. app.use(Print).mount('#app')

第三步:创建打印容器 要隐藏掉DOM节点且不能被删除只能使用v-show不能用v-if 

  <div id="printMe" v-show="false" >

    <!-- 打印的范围区域 id是用来获取打印的区域 --> 

  </div>

第四步:实现打印 使用v-print="printObj"可以使被绑定的元素获得点击唤起打印页面的功能

 <el-button  v-print="printObj" >打印商品条码</el-button>

注意:如果打印文本的内容是后端返回或者是异步的需要绘制一个预览页面 能预览页面的DOM数据加载完成之后再去掉用打印操作 (打印操作的唤起在Mounted之前 会导致打印页面为空白的)

思路↓↓↓↓↓

  1. <!-- 点击先唤起打印drawer弹框 -->
  2. <el-drawer
  3. :destroy-on-close="true"
  4. v-model="outerVisible"
  5. title="打印预览内容(单张)"
  6. >
  7. <PrinPage :arrList="[prinList[0]]" v-if="prinList.length" />
  8. <PrinPage id="printMe" :arrList="prinList" v-show="false" />
  9. <div v-if="!prinList.length">暂无打印数据</div>
  10. <template #footer>
  11. <span class="dialog-footer">
  12. <el-button type="primary" icon="Printer" v-print="printObj"
  13. >打印商品条码</el-button
  14. >
  15. </span>
  16. </template>
  17. </el-drawer>
  18. 思路:PrinPage 这个组件是被打印页面的区域
  19. 1.调用两次组件 第一个用来展示打印的页面 打印是靠ID进行区分的所以第一个不能给ID 第二个用v-show隐藏数据会和第一个一起进行加载
  20. 2.利用透传把需要打印的ID传入到组件内部去
  21. 3.在drawer内部绑定v-print="printObj"方法 来实现真正打印功能 此时页面的数据都加载完成

 注意:打印的表格需要用原生HTML不能用组件库否则又兼容性问题

  1. /我这边的表格头部都是后端动态传入的 包括keyvalue 只需要知道表格需要原生绘制即可/
  2. <table class="product-table">
  3. <thead>
  4. <tr>
  5. <th>序号</th>
  6. <th v-for="headerItem in item.header" :key="headerItem">
  7. {{ headerItem.lable }}
  8. </th>
  9. </tr>
  10. </thead>
  11. <tbody>
  12. <tr v-for="(product, index) in item.value" :key="index">
  13. <td>{{ index + 1 }}</td>
  14. <td v-for="valueItem in item.header" :key="valueItem">
  15. {{ product[valueItem.value] }}
  16. </td>
  17. </tr>
  18. <tr>
  19. <td :colspan="item.header.length - 1"></td>
  20. <td>合计</td>
  21. <td>{{ item.fixation.total }}</td>
  22. </tr>
  23. <tr>
  24. <td>备注</td>
  25. <td :colspan="item.header.length"></td>
  26. </tr>
  27. </tbody>
  28. </table>

总结:打印功能很简单绘制需要打印的页面即可 麻烦的是打印中包含条形码 我们需要做PDA扫码容错

下面是A4和挂牌的效果图↓↓↓↓↓↓↓

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/113088?site
推荐阅读
相关标签
  

闽ICP备14008679号