当前位置:   article > 正文

Vue3+vue3-print-nb 实现分页打印功能

vue3-print-nb

1、安装vue-print-nb

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

2、引入Vue项目

Vue2.0引入方式:

  1. // 1. 全局挂载
  2. import Print from 'vue-print-nb'
  3. Vue.use(Print)
  4. // 2. 自定义指令
  5. import print from 'vue-print-nb'
  6. directives: {
  7. print
  8. }

Vue3.0引入方式:

  1. // 1. 全局挂载
  2. import { createApp } from 'vue'
  3. import App from './App.vue'
  4. import print from 'vue3-print-nb'
  5. const app = createApp(App)
  6. app.use(print)
  7. app.mount('#app')
  8. // 2. 自定义指令
  9. import print from 'vue3-print-nb'
  10. directives: {
  11. print
  12. }

3、在组件中使用

注意:一定要给需要打印的容器加一个id,点击打印按钮的时候调用传入的id

  1. <t-button v-print="printContent">打印</t-button>
  2. <div style="display: none">
  3. <div id="printDiv">
  4. <div v-for="(item, index) in aaa" :key="index" style="page-break-after: always; color: #000">
  5. <div style="text-align: center; margin: 40px 0 20px 0; font-size: 30px">
  6. 服务确认表
  7. </div>
  8. <div style="border: 1px solid #000; margin: 0 auto; margin-top: 20px">
  9. <div style="width: 100%; display: flex; border-bottom: 1px solid #000">
  10. <div style="width: 45%; padding: 5px 5px; border-right: 1px solid #000">
  11. 参保人姓名:{{ item?.name || 'hhh' }}
  12. </div>
  13. <div style="padding: 5px 5px">参保人身份证号:{{ item.id_card }}</div>
  14. </div>
  15. <div style="padding: 5px 5px; border-bottom: 1px solid #000">
  16. 辅具类定点服务机构:
  17. </div>
  18. <div style="padding: 5px 5px; text-align: center; border-bottom: 1px solid #000">辅具服务确认</div>
  19. <div style="display: flex; border-bottom: 1px solid #000">
  20. <div class="classifier">
  21. 类别:
  22. <p><t-checkbox />初次配置</p>
  23. <p><t-checkbox />续租</p>
  24. <p><t-checkbox />续买</p>
  25. <p><t-checkbox />恢复服务</p>
  26. </div>
  27. <div style="width: 80%">
  28. <div v-for="(good_item, good_index) in goods_List" :key="good_index" style="padding: 5px 5px">
  29. <div style="vertical-align: bottom; display: flex; flex-wrap: wrap; padding: 4px 0">
  30. <t-checkbox />{{ `${good_index + 1}、${good_item.good_name};` }}生产厂家:
  31. <div class="goods_item"></div>
  32. ;品牌名称:
  33. <div class="goods_item"></div>
  34. ;型号:
  35. <div class="goods_item"></div>
  36. ;使用期限:
  37. <div class="goods_item"></div>
  38. <div v-if="good_item.goods_type == 2" style="display: flex">
  39. ;数量:
  40. <div class="goods_item"></div>
  41. </div>
  42. </div>
  43. </div>
  44. <div style="padding: 5px 5px">
  45. 共确认
  46. <span style="text-decoration: underline">
  47. {{ goods_List.length }}
  48. </span>
  49. </div>
  50. </div>
  51. </div>
  52. <div class="aaa">
  53. <div class="item"><t-checkbox /> 已安装</div>
  54. <div style="padding: 5px 5px"><t-checkbox />已进行使用指导</div>
  55. </div>
  56. <div class="aaa">
  57. <div class="item">工作人员:</div>
  58. <div style="padding: 5px 5px">送到日期:</div>
  59. </div>
  60. <div class="aaa">
  61. <div class="item">参保人员或代理人签字确认:</div>
  62. <div style="padding: 5px 5px">安装日期:</div>
  63. </div>
  64. <div style="padding: 5px 5px">
  65. 使用此表进行辅具器具初次配置、续租、续买、暂停后恢复服务的辅具器具配置确认
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. </div>
  1. const printContent = ref({
  2. id: 'printDiv',
  3. // preview: true, // 预览工具是否启用
  4. // previewTitle: '', // 预览页面的标题
  5. popTitle: '', // 打印页面的页眉
  6. });
  7. const aaa = ref([
  8. { name: '肖1', id_card: '111' },
  9. { name: '肖2', id_card: '222' },
  10. { name: '肖3', id_card: '333' },
  11. ]);
  12. const goods_List = ref([
  13. { good_name: '电动护理床', good_num: 1, goods_type: 1 },
  14. { good_name: '手动轮椅车', good_num: 1, goods_type: 1 },
  15. { good_name: '浴厕轮椅', good_num: 1, goods_type: 1 },
  16. { good_name: '坐便椅', good_num: 2, goods_type: 1 },
  17. { good_name: '助行器', good_num: 1, goods_type: 1 },
  18. { good_name: '充气防褥疮床垫', good_num: 1, goods_type: 1 },
  19. { good_name: '三角垫、看护垫', good_num: 1, goods_type: 1 },
  20. { good_name: '成人纸尿裤', good_num: 2, goods_type: 2 },
  21. { good_name: '护理垫', good_num: 2, goods_type: 2 },
  22. ]);

4、vue-print-nb插件优化

1.去掉页眉页脚

  1. <style lang="scss" scoped>
  2. @page {
  3. size: auto;
  4. margin: 0mm;
  5. }
  6. </style>

2.打印內容不自动换行问题
只需要给不自动换行的标签加上 word-wrap:break-word; 即可。

  1. <style lang="scss" scoped>
  2. .procedure{
  3. word-wrap:break-word;
  4. }
  5. </style>

3. 样式布局不生效问题

  1. <style lang="scss">
  2. @media print {
  3. //样式写在这里面
  4. }
  5. .title {
  6. word-wrap:break-word; //内容不自动换行问题
  7. }
  8. </style>

样式图:

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

闽ICP备14008679号