当前位置:   article > 正文

vue 打印_vue3打印

vue3打印

本文是基于vue3 进行写vue打印,vue2 只需要改动代码即可。

打印我使用的是vue3-print-nb,vue2也有对应的版本。

1. 安装vue3-print-nb

npm install vue3-print-nb --save

vue2 版本

npm install vue-print-nb --save 

安装完毕后,在vue3中使用是在main.js中进行引入

  1. import print from 'vue3-print-nb'
  2. createApp(App).use(store).use(router)
  3. .use(ElementPlus)
  4. .use(print)

 接着就是可以利用vue3-print-nb进行打印啦

我这里打印的数据是mock接口模拟的哦,大家自己也可以尝试着模拟数据过来

2.打印操作

  1. <el-button v-print="printObj" >打印</el-button>
  2. // 利用v-print进行打印,printObj是一个方法
  3. <!-- 打印部分的内容,v-show用来控制显示与隐藏,必须要在id的外面上面写,如果在id中写,则打印的内容不生效 -->
  4. <div v-show='false'>
  5. <div id='printMe' >
  6. <!-- 打印的关键在与id,它是利用id进行查找内容进行打印 -->
  7. <div v-for="(item,index) in data1" :key="index" >
  8. <h2 style='text-align:center;'>文章列表</h2>
  9. <div id='text'>
  10. <span>姓名:{{item.name}}</span>
  11. <span>创建时间:{{item.creataAt}}</span>
  12. <span>价格:{{item.sale}}</span>
  13. </div>
  14. <span>描述:{{item.desc}}</span>
  15. <table align='center'>
  16. <tr>
  17. <td colspan="2">第一行</td>
  18. </tr>
  19. <tr>
  20. <td>活动名称:{{form1.name}}</td>
  21. <td>活动区域:{{form1.region}}</td>
  22. </tr>
  23. </table>
  24. <!-- 用来控制分页 -->
  25. <div style="page-break-after: always;"></div>
  26. </div>
  27. </div>
  28. </div>

script中的代码

  1. import { ref, onMounted } from 'vue'
  2. import { print1 } from '@/api/index.js'
  3. const form1 = ref({
  4. name: '',
  5. region: 'shanghai'
  6. })
  7. const printObj = ref({
  8. id: 'printMe', // 打印哪一部分的名字
  9. popTitle: 'good print' // 打印的标题
  10. })
  11. const data1 = ref([])
  12. const getprint1 = async () => {
  13. const res = await print1()
  14. if (res.data.code === 200) {
  15. data1.value = res.data.data.list
  16. }
  17. console.log(data1.value)
  18. }
  19. onMounted(() => {
  20. getprint1()
  21. })

打印的样式写法:一定不要 使用class 哦,可能在后续打包的过程中导致样式失效,可以使用media或者是行内样式来解决这个问题。

这里在style的上面,写media=‘printMe’ printMe就是你要打印的地方的名字是什么,然后根据id=printMe就可以设置它的样式。

  1. <style lang="scss" media='printMe' scoped>
  2. // 非打印部分的样式
  3. #uu{
  4. background-color:blue;
  5. }
  6. // 打印部分的样式
  7. #printMe {
  8. #text{
  9. width:100%;
  10. background-color:blue;
  11. display:flex;
  12. height:120px;
  13. flex-wrap: wrap;
  14. span{
  15. width:33.3%;
  16. align-self:center;
  17. }
  18. }
  19. table{
  20. text-align: center;
  21. width:50%;
  22. height:100px;
  23. border-collapse: collapse;
  24. }
  25. td{
  26. border:1px solid black;
  27. }
  28. #printMe ::-webkit-scrollbar {
  29. display: none; /* Chrome Safari */
  30. }
  31. }
  32. </style>

打印效果如下:

 

页面展示效果如下:

 

最后附上完整代码:

  1. <template>
  2. <div>
  3. <!-- 在页面中显示打印的内容 -->
  4. <div style='height:400px; overflow:auto;'>
  5. <div v-for="(item,index) in data1" :key="index" >
  6. <h2 style='text-align:center;'>文章列表</h2>
  7. <div id='text'>
  8. <span>姓名:{{item.name}}</span>
  9. <span>创建时间:{{item.creataAt}}</span>
  10. <span>价格:{{item.sale}}</span>
  11. </div>
  12. <span>描述:{{item.desc}}</span>
  13. <table align='center'>
  14. <tr>
  15. <td colspan="2">第一行</td>
  16. </tr>
  17. <tr>
  18. <td>活动名称:{{form1.name}}</td>
  19. <td>活动区域:{{form1.region}}</td>
  20. </tr>
  21. </table>
  22. </div>
  23. </div>
  24. <!-- 打印部分的内容,v-show用来控制显示与隐藏,必须要在id的外面上面写,如果在id中写,则打印的内容不生效 -->
  25. <div v-show='false'>
  26. <div id='printMe' >
  27. <!-- 打印的关键在与id,它是利用id进行查找内容进行打印 -->
  28. <div v-for="(item,index) in data1" :key="index" >
  29. <h2 style='text-align:center;'>文章列表</h2>
  30. <div id='text'>
  31. <span>姓名:{{item.name}}</span>
  32. <span>创建时间:{{item.creataAt}}</span>
  33. <span>价格:{{item.sale}}</span>
  34. </div>
  35. <span>描述:{{item.desc}}</span>
  36. <table align='center'>
  37. <tr>
  38. <td colspan="2">第一行</td>
  39. </tr>
  40. <tr>
  41. <td>活动名称:{{form1.name}}</td>
  42. <td>活动区域:{{form1.region}}</td>
  43. </tr>
  44. </table>
  45. <!-- 用来控制分页 -->
  46. <div style="page-break-after: always;"></div>
  47. </div>
  48. </div>
  49. </div>
  50. <el-button v-print="printObj" >打印</el-button>
  51. <div>
  52. <el-form ref="form" :model="form1" label-width="80px" id='uu'>
  53. <el-form-item label="活动名称">
  54. <el-input v-model="form1.name"></el-input>
  55. </el-form-item>
  56. <el-form-item label="活动区域">
  57. <el-select v-model="form1.region" placeholder="请选择活动区域">
  58. <el-option label="区域一" value="shanghai"></el-option>
  59. <el-option label="区域二" value="beijing"></el-option>
  60. </el-select>
  61. </el-form-item>
  62. </el-form>
  63. </div>
  64. </div>
  65. </template>
  66. <script setup>
  67. import { ref, onMounted } from 'vue'
  68. import { print1 } from '@/api/index.js'
  69. const form1 = ref({
  70. name: '',
  71. region: 'shanghai'
  72. })
  73. const printObj = ref({
  74. id: 'printMe', // 打印哪一部分的名字
  75. popTitle: 'good print' // 打印的标题
  76. })
  77. const data1 = ref([])
  78. const getprint1 = async () => {
  79. const res = await print1()
  80. if (res.data.code === 200) {
  81. data1.value = res.data.data.list
  82. }
  83. console.log(data1.value)
  84. }
  85. onMounted(() => {
  86. getprint1()
  87. })
  88. </script>
  89. <style lang="scss" media='printMe' scoped>
  90. // 非打印部分的样式
  91. #uu{
  92. background-color:blue;
  93. }
  94. // 打印部分的样式
  95. #printMe {
  96. #text{
  97. width:100%;
  98. background-color:blue;
  99. display:flex;
  100. height:120px;
  101. flex-wrap: wrap;
  102. span{
  103. width:33.3%;
  104. align-self:center;
  105. }
  106. }
  107. table{
  108. text-align: center;
  109. width:50%;
  110. height:100px;
  111. border-collapse: collapse;
  112. }
  113. td{
  114. border:1px solid black;
  115. }
  116. #printMe ::-webkit-scrollbar {
  117. display: none; /* Chrome Safari */
  118. }
  119. }
  120. </style>

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

闽ICP备14008679号