• vue pc端/手机移动端 — 下载导出当前表格页面pdf格式


    一、需求:在手机端/pc端实现一个表格页面(缴费单/体检报告单等)的导出功能,便于用户在本地浏览打印。

    二、实现:之前在pc端做过预览打印的功能,使用的是print.js之类的方法让当前页面直接唤起打印机的打印预览功能,但是手机端这种方式不太友好,所以采用如下方式实现:

    1.将要打印的页面转换成图片( 用到的组件 html2canvas );

    2.然后将图片导出成PDF( 用到的组件 jspdf )。

    • 安装依赖:
    1. npm install --save html2canvas // 页面转图片
    2. npm install jspdf --save // 图片转pdf
    • 在utils文件夹创建一个pdf.js文件,实现页面转图片导出成A4纸大小的pdf文件;
    1. import html2canvas from "html2canvas";
    2. import jsPDF from "jspdf";
    3. /**
    4. * 导出pdf
    5. * @param {*} page 要打印的区域
    6. * @param {*} name 下载导出的名字
    7. */
    8. export const downloadPDF = (page, name) => {
    9. html2canvas(page).then(function (canvas) {
    10. canvas2PDF(canvas, name);
    11. });
    12. };
    13. //图片转pdf
    14. const canvas2PDF = (canvas, name) => {
    15. let contentWidth = canvas.width;
    16. let contentHeight = canvas.height;
    17. //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
    18. let imgWidth = 595.28;
    19. let imgHeight = (592.28 / contentWidth) * contentHeight;
    20. // 第一个参数: l:横向 p:纵向
    21. // 第二个参数:测量单位("pt","mm", "cm", "m", "in" or "px")
    22. let pdf = new jsPDF("p", "pt");
    23. pdf.addImage(
    24. canvas.toDataURL("image/jpeg", 1.0),
    25. "JPEG",
    26. 0,
    27. 0,
    28. imgWidth,
    29. imgHeight
    30. );
    31. pdf.save(name + "报告单.pdf");
    32. };
    • 在要打印的页面触发这个下载导出的方法;
    1. <script>
    2. import { downloadPDF } from "@/utils/pdf.js"; // 工具方法,导出操作
    3. export default {
    4. name: "referralDetail",
    5. data() {
    6. return {
    7. infoObj: {},
    8. titleArr: [
    9. { value: "xxx", label: "患者姓名"},
    10. { value: "xxx", label: "身份证号"},
    11. { value: "xxx", label: "性别"},
    12. { value: "xxx", label: "联系方式"},
    13. { value: "xxx", label: "转入机构"},
    14. { value: "xxx", label: "转诊类型"},
    15. { value: "xxx", label: "审批医生"},
    16. { value: "xxx", label: "接收科室"},
    17. { value: "xxx", label: "转出机构"},
    18. { value: "xxx", label: "转出科室"},
    19. { value: "xxx", label: "转出医生"},
    20. { value: "xxx", label: "申请日期"},
    21. { value: "xxx", label: "转诊状态"},
    22. { value: "xxx", label: "医保类型"},
    23. { value: "xxx", label: "主要诊断"},
    24. { value: "xxx", label: "病情等级"}
    25. ],
    26. };
    27. },
    28. created() {
    29. if (this.$route.query) {
    30. this.infoObj = this.$route.query.infoData;
    31. }
    32. },
    33. methods: {
    34. // 导出
    35. handleExport(name) {
    36. //调用打印方法(打印区域,导出名称)
    37. downloadPDF(this.$refs.print, name);
    38. },
    39. // 倒退
    40. toBack() {
    41. this.$router.go(-1);
    42. },
    43. },
    44. };
    45. script>
    46. <style lang="less" scoped>
    47. style>
    • 界面效果如下: 

    •  点击导出按钮得到的pc端查看效果如下:

  • 相关阅读:
    BAT026:删除当前目录及子目录下的空文件夹
    springboot新冠疫苗预约管理系统毕业设计-附源码241530
    虚拟机的IP地址自动变为127.0.0.1
    力扣207、课程表 【图】
    【C++编程】类的静态 static 成员 & 常 const 函数
    基于时间触发机制的5G应用确定性方案探索
    5道面试题,拿捏String底层原理!
    Flink 状态管理
    MyBatis 动态SQL与分页
    使用 SAP UI5 sap.ui.export.Spreadsheet API 进行 Excel 导出的一些限制
  • 原文地址:https://blog.csdn.net/weixin_47978760/article/details/133302079