当前位置:   article > 正文

vue2 使用print.js实现打印功能_printjs

printjs

记录print.js实现打印功能的过程。

参考文章:前端使用print.js实现打印

  • 安装及导入

方式一:在官网下载

官网:Print.js - Javascript library for HTML elements, PDF and image files printing.

  • 将下载的print.js放到utils目录下
  • 全局引入(在main.js中),或者局部引入(在需要的文件中引入)
import Print from '@/utils/print.js'

方式二:npm下载print.js插件

  1. // npm
  2. npm install print-js --save
  3. // yarn
  4. yarn add print-js
  • 全局引入(在main.js中),或者局部引入(在需要的文件中引入)
import Print from 'print-js'
  • 使用方法

可以通过给打印区域设置class类名或id值,也可以使用ref获取DOM节点。

这里是给打印区域设置id值。

  1. <div class="printJs-container" id="allPage">
  2. <div id="printPage" class="common-printPage">
  3. <div class="button-container">
  4. <el-button type="primary" class="common-button" @click="printType('onePicture')">打印一张图片</el-button>
  5. <el-button type="primary" class="common-button" @click="printType('allPicture')">打印全部图片</el-button>
  6. <el-button type="primary" class="common-button" @click="printType('json')">打印Json</el-button>
  7. <el-button type="primary" class="common-button" @click="printType('html')">打印html</el-button>
  8. </div>
  9. <div class="img-container" id="imgPrint">
  10. <div v-for="item in 4">
  11. <img :src="Logo" alt="" class="logo-img">
  12. </div>
  13. </div>
  14. <div class="json-container" id="jsonPrint">
  15. <el-table
  16. :data="tableData"
  17. border
  18. >
  19. <el-table-column label="活动" prop="title"></el-table-column>
  20. <el-table-column label="描述" prop="decs"></el-table-column>
  21. <el-table-column label="状态" prop="state"></el-table-column>
  22. <el-table-column label="活动时间" prop="created_at"></el-table-column>
  23. </el-table>
  24. </div>
  25. </div>
  26. </div>

局部引入print-js,指定不同的打印类型。

  1. <script>
  2. import { editTableData } from '@/mock/jsModule/table.js'
  3. import variables from '@/styles/variables.scss'
  4. import printJS from 'print-js'
  5. import logo from '@/assets/image/logo.png'
  6. export default {
  7. name: 'index',
  8. data(){
  9. return {
  10. Logo: logo,
  11. }
  12. },
  13. computed:{
  14. variables(){
  15. return variables
  16. },
  17. tableData(){
  18. var data = JSON.parse(JSON.stringify(editTableData))
  19. data = data.map(item =>{
  20. return {
  21. ...item,
  22. state: item.state == 1 ? '已开启' : '未开启'
  23. }
  24. })
  25. return data
  26. },
  27. },
  28. methods: {
  29. // 打印类型
  30. printType(type){
  31. switch (type){
  32. case 'onePicture':
  33. printJS({
  34. type: 'image',
  35. printable: [logo],
  36. documentTitle: '打印图片',
  37. })
  38. break
  39. case 'allPicture':
  40. printJS({
  41. type: 'html',
  42. printable: 'imgPrint',
  43. documentTitle: '打印图片',
  44. })
  45. break
  46. case 'json':
  47. printJS({
  48. type: 'json',
  49. documentTitle: '打印表格',
  50. printable: this.tableData,
  51. // 打印json时传入的表头名称(必传),要和json中的键值对的键保持一致
  52. properties: [
  53. { field: 'title', displayName: '活动' },
  54. { field: 'decs', displayName: '描述' },
  55. { field: 'state', displayName: '状态' },
  56. { field: 'created_at', displayName: '活动日期' },
  57. ],
  58. // 打印JSON时,表格的自定义样式
  59. gridStyle: 'text-align: left;border: 1px solid lightgray;font-size: 12px; line-height: 26px;',
  60. gridHeaderStyle: 'font-weight: 500; border: 1px solid lightgray; line-height: 30px;',
  61. })
  62. break
  63. case 'html':
  64. printJS({
  65. type: 'html',
  66. printable: 'allPage',
  67. documentTitle: '打印html页面',
  68. // 写入自定义样式
  69. style: `
  70. th, td{ text-align: left; border: 1px solid lightgray; font-size: 12px; padding: 0 10px;}
  71. .el-button{ border: 1px solid #62afe3; margin-right: 20px;}
  72. .img-container{ margin: 20px 0;}
  73. .config-container{ padding-top: 30px;}
  74. .config-title{ margin-bottom: 10px;}
  75. .problem{ margin-top: 100px; border-left: 10px solid #42b983; background: #f5f7fa; padding: 20px;}
  76. `
  77. })
  78. break
  79. }
  80. }
  81. }
  82. }
  83. </script>

editTableData的值

  1. export const editTableData = [
  2. {
  3. id: 202304061,
  4. title: '学习vue框架基础知识',
  5. readonly: '学习vue框架基础知识',
  6. decs: '易学易用,性能出色,适用场景丰富的Web前端框架',
  7. state: 1,
  8. created_at: '2023-04-06',
  9. update_at: '2023-04-10',
  10. edit: false,
  11. },
  12. {
  13. id: 202304062,
  14. title: '深入学习vue-router',
  15. readonly: '深入学习vue-router',
  16. decs: '为 Vue.js 提供富有表现力、可配置的、方便的路由',
  17. state: 1,
  18. created_at: '2023-04-07',
  19. update_at: '2023-04-11',
  20. edit: false,
  21. },
  22. {
  23. id: 202304063,
  24. title: '学习vue-cli快速搭建框架',
  25. readonly: '学习vue-cli快速搭建框架',
  26. decs: 'Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统',
  27. state: -1,
  28. created_at: '2023-04-12',
  29. update_at: '2023-04-18',
  30. edit: true,
  31. },
  32. {
  33. id: 202304064,
  34. title: '深入学习vue框架相关内容',
  35. readonly: '深入学习vue框架相关内容',
  36. decs: '关于框架搭建,开发,部署',
  37. state: -1,
  38. created_at: '2023-04-14',
  39. update_at: '2023-04-21',
  40. edit: true,
  41. }
  42. ]

配置参数说明: 

  • printable

PDF或图像:URL地址; HTML:元素id; JSON:数组。

  •  properties

打印JSON时传入的表头名称,要和JSON中的键值对的键保持一致。

  • gridStyle

打印JSON时,表格的自定义样式。

  • gridHeaderStyle

打印JSON时,表头的自定义样式。

  • style

传入自定义样式的字符串,作用于被打印的HTML标签上。自定义页面上所有元素的样式,在打印时生效。

  • 效果图

I. 只打印图片

 

II. 打印表格

 III. 打印整个页面

打印时发现表格显示不全,需手动调整打印设置,在右边的更多设置-缩放,选择自定义,缩放至合适的大小。 

  • print.js配置参数

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

闽ICP备14008679号