当前位置:   article > 正文

vue3 vben admin +ts + printJS 打印 的三种方式 页面分布 日期页眉取消_vue3 print-js

vue3 print-js

(下边答疑解惑  讲解了如何分布多页面   如何调整纸张大小  ) 

安装

  1. To install using npm:
  2. npm install print-js --save
  3. To install using yarn:
  4. yarn add print-js

最近的新需求,是打印表格 查了好多地方,然后总结了三种方法

无论哪种方式都需要下载 然后引入

地址:https://printjs.crabbly.com/

   import printJS from 'print-js';

方法一:主要是打印页面上的所有东西  ,页面有什么他就打印什么,标签除外,但是 这个没有选择性,

  1. <template>
  2. <div class="print-div" id="print_area">
  3. <Row type="flex" class="example-body">
  4. <Col :flex="2" class="demo-uni-col dark_deep" v-for="item in list" :key="item.id">
  5. <p>{{ item.text }}</p>
  6. <p>
  7. <input type="number" class="inputNumber" :min="0" :max="10" v-model="item.input">
  8. <!-- <input type="number" class="inputNumber" :min="0" :max="10" v-model="from1[item.num]" /> -->
  9. </p>
  10. </Col>
  11. </Row>
  12. <button @click="printSomething">打印</button>
  13. </div>
  14. </template>
  15. <script lang="ts">
  16. import printJS from 'print-js';
  17. import { Row } from 'ant-design-vue';
  18. import { Col } from 'ant-design-vue';
  19. import { reactive } from 'vue'
  20. export default {
  21. components: {
  22. Row,
  23. Col,
  24. },
  25. setup() {
  26. const list: any = reactive([
  27. {
  28. id: 1,
  29. text: '出勤情况:满勤,无请假迟到早退等情况(满分10分)',
  30. num: '出勤情况',
  31. input: ''
  32. },
  33. {
  34. id: 2,
  35. text: '工作积极性:主动承担分内工作,对本人职责范围内的工作无推诿(满分10分)',
  36. num: '工作积极性',
  37. input: ''
  38. },
  39. {
  40. id: 3,
  41. text: '责任意识:本职工作有责任心,及时完成交付的工作,无拖延(满分10分)',
  42. num: '责任意识',
  43. input: ''
  44. },
  45. {
  46. id: 4,
  47. text: '协作与配合:与上下级,同事工作配合度(满分10分)',
  48. num: '协作与配合',
  49. input: ''
  50. },
  51. ])
  52. function printSomething() {
  53. // 此处的style即为打印时的样式
  54. const style = '@page { } ' + '@media print { .print-div{ padding:8px;background-color:#cccccc;line-height:12px } .red{ color:#f00} .green{color:green}';
  55. printJS({
  56. printable: 'print_area',
  57. type: 'html',
  58. style: style,// 亦可使用引入的外部css;
  59. scanStyles: false
  60. })
  61. }
  62. return {
  63. list,
  64. printSomething
  65. }
  66. }
  67. }
  68. </script>
  69. <style>
  70. </style>

print包裹在哪就从哪里开始进行渲染

效果展示 

 

 -------------------------------------------------------------------------------------------------------------------------------

方法二 : 这个主要是在下边的打印列表进行数据的导入,然后在进行输出,但是格式相对来说比较固定,你需要在他给你的属性里边定义数据

  1. <template>
  2. <div>
  3. <button @click="jsonPrint">打印</button>
  4. </div>
  5. </template>
  6. <script lang="ts">
  7. import printJS from 'print-js';
  8. import { Row } from 'ant-design-vue';
  9. import { Col } from 'ant-design-vue';
  10. import { reactive , ref } from 'vue'
  11. export default {
  12. components:{
  13. Row,
  14. Col,
  15. },
  16. setup(){
  17. const nav: any = reactive([{
  18. id: 1,
  19. text: '任务达成:工作成绩考核(满分5分))',
  20. num: '任务达成',
  21. input:'',
  22. powerOutageTotalNum:'powerOutageTotalNum'
  23. },
  24. {
  25. id: 2,
  26. text: '成本控制:工作任务中的各项费用、物资、时间成本管控(满分5分)',
  27. num: '成本控制',
  28. input:'',
  29. powerOutageTotalNum:'powerOutageTotalNum'
  30. },
  31. {
  32. id: 3,
  33. text: '岗位意识:本职工作整体认知及达成效果(满分5分)',
  34. num: '岗位意识',
  35. input:'',
  36. powerOutageTotalNum:'powerOutageTotalNum'
  37. },
  38. {
  39. id: 4,
  40. text: '岗位规划:岗位长远规划及执行情况等(满分5分)',
  41. num: '岗位规划',
  42. input:'',
  43. powerOutageTotalNum:'powerOutageTotalNum'
  44. },
  45. ]);
  46. function jsonPrint() {
  47. printJS({
  48. printable: nav, //表格的数据
  49. properties: [ //表头
  50. {field: 'id', displayName: '地区', columnSize: `10%`},
  51. {field: 'text', displayName: '确认跳闸条数',columnSize: `65%`},
  52. {field: 'num', displayName: '误报条数'},
  53. {field: 'input', displayName: '跳闸总条数'},
  54. {field: 'powerOutageTotalNum', displayName: '误报指数', columnSize: `10%`},
  55. ],
  56. type: 'json',
  57. gridHeaderStyle: 'border: 1px solid #000;text-align:center',
  58. gridStyle: 'border: 1px solid #000;text-align:center',
  59. style: ' span {color :red ;width: 300px;border: 1px solid #000; display: flex; }' // 表格样式
  60. })
  61. }
  62. return{
  63. nav,
  64. jsonPrint,
  65. }
  66. }
  67. }
  68. </script>
  69. <style>
  70. </style>

但是样式相对来说比较固定

效果展示

方式三 : 在header里边进行定义  然后在里边进行数据的排版修改等 样式相对来说灵活  你可以在里边选择自己需要的样式  内容 然后在进行渲染

  1. <template>
  2. <div>
  3. <Button type="primary" @click="jsonPrint">打印</Button>
  4. </div>
  5. </template>
  6. <script lang="ts">
  7. import printJS from 'print-js';
  8. import { Button } from '/@/components/Button';
  9. export default {
  10. components:{
  11. Button,
  12. },
  13. setup(){
  14. let name2="周阿狗"
  15. function jsonPrint() {
  16. printJS({
  17. printable: [], //表格的数据
  18. header: `<div style="display: flex;flex-direction: column;text-align: center">
  19. <table border="1" width="100%" height="100%" >
  20. <tr>
  21. <!-- colspan跨n列 -->
  22. <td colspan="12">学生作业考核评价表</td>
  23. </tr>
  24. <tr>
  25. <td colspan="2">员工姓名</td>
  26. <td colspan="2">${name2}</td>
  27. <td colspan="1">部门</td>
  28. <td colspan="3">德玛西亚</td>
  29. <td colspan="2">所在职位</td>
  30. <td colspan="2">射手</td>
  31. </tr>
  32. <tr>
  33. <td colspan="3">考核时间段</td>
  34. <td colspan="3">2022/08/14</td>
  35. <td colspan="1">--</td>
  36. <td colspan="5">2022/08/14</td>
  37. </tr>
  38. <tr>
  39. <td colspan="4">老师考核</td>
  40. <td colspan="8">良好:80分≤考核分<90</td>
  41. </tr>
  42. </table>
  43. <table border="1" width="100%" height="100%" >
  44. <tr>
  45. <td colspan="1">序号</td>
  46. <td colspan="1">项目</td>
  47. <td colspan="4">考核标准评分</td>
  48. <td colspan="2">自我评分</td>
  49. <td colspan="2">老师评分</td>
  50. <td colspan="3">综合评分</td>
  51. </tr>
  52. <tr>
  53. <td rowspan="4">1</td>
  54. <td rowspan="4">考勤状况及态度考核</td>
  55. <td colspan="4">出勤情况:满勤,无请假迟到早退等情况(满分10分)</td>
  56. <td colspan="2">7</td>
  57. <td colspan="2">7</td>
  58. <td colspan="2">7</td>
  59. </tr>
  60. <tr>
  61. <td colspan="4">工作积极性:主动承担分内工作,对本人职责范围内的工作无推诿(满分10分)</td>
  62. <td colspan="2">7</td>
  63. <td colspan="2">7</td>
  64. <td colspan="2">7</td>
  65. </tr>
  66. <tr>
  67. <td colspan="4">责任意识:本职工作有责任心,及时完成交付的工作,无拖延(满分10分)</td>
  68. <td colspan="2">7</td>
  69. <td colspan="2">7</td>
  70. <td colspan="2">7</td>
  71. </tr>
  72. <tr>
  73. <td colspan="4">协作与配合:与上下级,同事工作配合度(满分10分)</td>
  74. <td colspan="2">7</td>
  75. <td colspan="2">7</td>
  76. <td colspan="2">7</td>
  77. </tr>
  78. <tr>
  79. <td rowspan="5">2</td>
  80. <td rowspan="5">个人素质和工作能力考核</td>
  81. <td colspan="4">工作胜任度:对岗位专业知识匹配度及精通度(满分10分)</td>
  82. <td colspan="2">7</td>
  83. <td colspan="2">7</td>
  84. <td colspan="2">7</td>
  85. </tr>
  86. <tr>
  87. <td colspan="4">风险管控:对工作中公司商务、法律管控度考核(满分10分)</td>
  88. <td colspan="2">7</td>
  89. <td colspan="2">7</td>
  90. <td colspan="2">7</td>
  91. </tr>
  92. <tr>
  93. <td colspan="4">贡献度:对公司可持续性发展有合理化建议,个人持续成长学习能力等(满分10分)</td>
  94. <td colspan="2">7</td>
  95. <td colspan="2">7</td>
  96. <td colspan="2">7</td>
  97. </tr>
  98. <tr>
  99. <td colspan="4">创新执行力:工作中运用创新思维、新方法,及时精准贯彻执行单位安排的任务(满分10分)</td>
  100. <td colspan="2">7</td>
  101. <td colspan="2">7</td>
  102. <td colspan="2">7</td>
  103. </tr>
  104. <tr>
  105. <td colspan="4">工作效率:工作时间内保质保量完成公司下达的工作计划(满分10分)</td>
  106. <td colspan="2">7</td>
  107. <td colspan="2">7</td>
  108. <td colspan="2">7</td>
  109. </tr>
  110. <tr>
  111. <td rowspan="4">3</td>
  112. <td rowspan="4">工作成绩考核</td>
  113. <td colspan="4">任务达成:工作成绩考核(满分5分)</td>
  114. <td colspan="2">7</td>
  115. <td colspan="2">7</td>
  116. <td colspan="2">7</td>
  117. </tr>
  118. <tr>
  119. <td colspan="4">成本控制:工作任务中的各项费用、物资、时间成本管控(满分5分)</td>
  120. <td colspan="2">7</td>
  121. <td colspan="2">7</td>
  122. <td colspan="2">7</td>
  123. </tr>
  124. <tr>
  125. <td colspan="4">岗位意识:本职工作整体认知及达成效果(满分5分)</td>
  126. <td colspan="2">7</td>
  127. <td colspan="2">7</td>
  128. <td colspan="2">7</td>
  129. </tr>
  130. <tr>
  131. <td colspan="4">岗位规划:岗位长远规划及执行情况等(满分5分)</td>
  132. <td colspan="2">5</td>
  133. <td colspan="2">5</td>
  134. <td colspan="2">5</td>
  135. </tr>
  136. <tr>
  137. <td rowspan="2">4</td>
  138. <td rowspan="2">增减分项</td>
  139. <td colspan="4">主管加分</td>
  140. <td colspan="2">5</td>
  141. <td colspan="2">5</td>
  142. <td colspan="2">5</td>
  143. </tr>
  144. <tr>
  145. <td colspan="4">主管减分</td>
  146. <td colspan="2">5</td>
  147. <td colspan="2">5</td>
  148. <td colspan="2">5</td>
  149. </tr>
  150. <tr>
  151. <td colspan="6">总结</td>
  152. <td colspan="2"></td>
  153. <td colspan="2"></td>
  154. <td colspan="2"></td>
  155. </tr>
  156. <tr>
  157. <td colspan="6">综合的烦恼</td>
  158. <td colspan="6"></td>
  159. </tr>
  160. </table>
  161. <table border="1" width="100%" height="100%" >
  162. <tr>
  163. <td colspan="1">序号</td>
  164. <td colspan="1">处理人</td>
  165. <td colspan="1">处理结果</td>
  166. <td colspan="3">处理意见</td>
  167. <td colspan="2">签名</td>
  168. <td colspan="2">附件</td>
  169. <td colspan="2">结束时间</td>
  170. </tr>
  171. <tr>
  172. <td colspan="1">1</td>
  173. <td colspan="1">经理</td>
  174. <td colspan="1">同意</td>
  175. <td colspan="3">-</td>
  176. <td colspan="2">签名</td>
  177. <td colspan="2">附件</td>
  178. <td colspan="2">2023/03/34</td>
  179. </tr>
  180. <tr>
  181. <td colspan="1">1</td>
  182. <td colspan="1">经理</td>
  183. <td colspan="1">同意</td>
  184. <td colspan="3">-</td>
  185. <td colspan="2">签名</td>
  186. <td colspan="2">附件</td>
  187. <td colspan="2">2023/03/34</td>
  188. </tr>
  189. <tr>
  190. <td colspan="1">1</td>
  191. <td colspan="1">经理</td>
  192. <td colspan="1">同意</td>
  193. <td colspan="3">-</td>
  194. <td colspan="2">签名</td>
  195. <td colspan="2">附件</td>
  196. <td colspan="2">2023/03/34</td>
  197. </tr>
  198. </table>
  199. </div>`,
  200. properties: [ //表头
  201. // {field: 'id', displayName: '地区', columnSize: `10%`},
  202. // {field: 'text', displayName: '确认跳闸条数',columnSize: `65%`},
  203. // {field: 'num', displayName: '误报条数'},
  204. // {field: 'powerOutageTotalNum', displayName: '跳闸总条数'},
  205. // {field: 'powerOutageErrorIndex', displayName: '误报指数', columnSize: `10%`},
  206. ],
  207. type: 'json',
  208. gridHeaderStyle: 'border: 1px solid #000;text-align:center',
  209. gridStyle: 'border: 1px solid #000;text-align:center',
  210. style: ' span {color :red ;width: 300px;border: 1px solid #000; display: flex; }' // 表格样式
  211. })
  212. }
  213. return{
  214. jsonPrint,
  215. name2
  216. }
  217. }
  218. }
  219. </script>
  220. <style>
  221. </style>

效果展示

现在线不是双线吗  如果你想让他变成单线的话,在table后边加上一句

 cellpadding="0" cellspacing="0" style="border-collapse:collapse" 

就可以了

好了三种说完了  欢迎提出不足  也欢迎交流,希望对你有帮助,

------------------------------------------------------------------------------------------------------------------------------

完整案例展示 

  1. <template>
  2. <div>
  3. <table width="100%" height="100%" border="1">
  4. <tr>
  5. <td colspan="1">1</td>
  6. <td colspan="1">员工姓名</td>
  7. <input v-model="name" style="color: red; width: 100px" />
  8. <td colspan="3">员工部门</td>
  9. <input v-model="department" style="color: red; width: 100px" />
  10. </tr>
  11. </table>
  12. <table width="100%" height="100%" border="1">
  13. <tr>
  14. <td colspan="1">2</td>
  15. <td colspan="1">所在职位</td>
  16. <input v-model="position" style="color: red; width: 100px" />
  17. <td colspan="3">考核吐槽项目</td>
  18. <input v-model="message" style="color: red; width: 100px" />
  19. </tr>
  20. </table>
  21. <table width="100%" height="100%" border="1">
  22. <tr>
  23. <td colspan="1">3</td>
  24. <td colspan="1">a</td>
  25. <input type="number" v-model="a" style="color: red; width: 100px" />
  26. <td colspan="1">*</td>
  27. <td colspan="1">b</td>
  28. <input type="number" v-model="b" style="color: red; width: 100px" />
  29. <td colspan="3">是否满足( > 1593)</td>
  30. <td colspan="3">{{ this.list }}</td>
  31. </tr>
  32. </table>
  33. <button @click="jsonPrint">打印</button>
  34. </div>
  35. </template>
  36. <script lang="ts">
  37. import printJS from "print-js";
  38. export default {
  39. data() {
  40. return {
  41. fraction: '', //分数
  42. name: "", //名字
  43. department: '', //部门
  44. message: "", //吐槽
  45. position: "", //职位
  46. a:'', //分数1
  47. b:'' //分数2
  48. };
  49. },
  50. computed: {
  51. // 计算分数总数
  52. num() {
  53. return this.a * this.b ;
  54. },
  55. // 改变吐槽展现形式
  56. reverseMessage() {
  57. return this.message.split("")
  58. // return this.message.split("").reverse().join("");
  59. },
  60. // list 是判断num的满足条件
  61. list() {
  62. if (this.num > 1593) {
  63. return "满足";
  64. } else {
  65. return "不满足";
  66. }
  67. },
  68. },
  69. methods: {
  70. jsonPrint() {
  71. printJS({
  72. printable: [], //表格的数据
  73. header: `<div style="display: flex;flex-direction: column;text-align: center">
  74. <table border="1" width="100%" height="100%" >
  75. <tr>
  76. <!-- colspan跨n列 -->
  77. <td colspan="12">学生作业考核评价表</td>
  78. </tr>
  79. <tr>
  80. <td colspan="2">员工姓名</td>
  81. <td colspan="2" >${this.name}</td>
  82. <td colspan="1">部门</td>
  83. <td colspan="3">${this.department}</td>
  84. <td colspan="2">所在职位</td>
  85. <td colspan="2">${this.position}</td>
  86. </tr>
  87. <tr>
  88. <td colspan="3">考核吐槽项目</td>
  89. <td colspan="3">${this.reverseMessage}</td>
  90. <td colspan="1">考核分数</td>
  91. <td colspan="5"> ${this.num}</td>
  92. </tr>
  93. <tr>
  94. <td colspan="4">考核结果</td>
  95. <td colspan="8">${this.list}</td>
  96. </tr>
  97. </table>
  98. <table border="1" width="100%" height="100%">
  99. <tr>
  100. <td colspan="1">序号</td>
  101. <td colspan="1">项目</td>
  102. <td colspan="4">考核标准评分</td>
  103. <td colspan="2">自我评分</td>
  104. <td colspan="2">老师评分</td>
  105. <td colspan="3">综合评分</td>
  106. </tr>
  107. <tr>
  108. <td rowspan="4">1</td>
  109. <td rowspan="4">考勤状况及态度考核</td>
  110. <td colspan="4">出勤情况:满勤,无请假迟到早退等情况(满分10分)</td>
  111. <td colspan="2">7</td>
  112. <td colspan="2">7</td>
  113. <td colspan="2">7</td>
  114. </tr>
  115. <tr>
  116. <td colspan="4">工作积极性:主动承担分内工作,对本人职责范围内的工作无推诿(满分10分)</td>
  117. <td colspan="2">7</td>
  118. <td colspan="2">7</td>
  119. <td colspan="2">7</td>
  120. </tr>
  121. <tr>
  122. <td colspan="4">责任意识:本职工作有责任心,及时完成交付的工作,无拖延(满分10分)</td>
  123. <td colspan="2">7</td>
  124. <td colspan="2">7</td>
  125. <td colspan="2">7</td>
  126. </tr>
  127. <tr>
  128. <td colspan="4">协作与配合:与上下级,同事工作配合度(满分10分)</td>
  129. <td colspan="2">7</td>
  130. <td colspan="2">7</td>
  131. <td colspan="2">7</td>
  132. </tr>
  133. </table>
  134. </div>`,
  135. properties: [
  136. //表头
  137. // {field: 'id', displayName: '地区', columnSize: `10%`},
  138. // {field: 'text', displayName: '确认跳闸条数',columnSize: `65%`},
  139. // {field: 'num', displayName: '误报条数'},
  140. // {field: 'powerOutageTotalNum', displayName: '跳闸总条数'},
  141. // {field: 'powerOutageErrorIndex', displayName: '误报指数', columnSize: `10%`},
  142. ],
  143. type: "json",
  144. gridHeaderStyle: "border: 1px solid #000;text-align:center",
  145. gridStyle: "border: 1px solid #000;text-align:center",
  146. style:
  147. " span {color :red ;width: 300px;border: 1px solid #000; display: flex; }", // 表格样式
  148. });
  149. },
  150. },
  151. };
  152. </script>
  153. <style>
  154. </style>

------------------------------------------------------------------------------------------------------------------------------ 

三 。 答疑解惑     请仔细阅读

问题  : 如何调整页面大小    如何进行多页分布    调整页面布局 纸张大小等 

答      : 你需要点击打印   打印效果页面下边会有更多设置(如下图)   打开更多设置 根据自己情况调节  ,你要是想分多页打印可以在  下边调整页面缩放状态  然后第一页放不下就会到第二页去 你可以进行页面状态的控制的 我下边有演示 可以看一下

问题  :  如何进行分页设置

答      :   可以在创建页面的时候定好每页大小以及整体的打印状态   也可以在更多设置里边更改页面缩放值  和页边距  就可以达到一下效果  

(1)没有调整状态全在一页 没有分布 

 (2)在设置调整页面状态分布成了两页  (第一页 和 第二页 )

页眉删除    

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

闽ICP备14008679号