vue 生成pdf文件,Vue做pdf文件预览下载

  vue 生成pdf文件,Vue做pdf文件预览下载

  公众中经常会出现这样的场景。几页合同、协议等。需要下载,并且它们需要与页面保持一致。下面这篇文章主要介绍在Vue页面上生成PDF的最佳方法。有需要的朋友可以参考一下。

  

目录

  前言安装取决于页面到图片到PDFA4打印适应摘要

  

前言

  最近项目有一个需求,就是把系统的统计数据生成一个分析报告,然后导出为PDF。

  有两种方法可以做到这一点。一种方式是直接调用打印,用户可以通过浏览器提供的打印页面手动选择导出PDF。当然这种方式兼容性差,体验不好,显然不是我们想要的效果。

  那么第二种方法的实现思路是什么呢?

  首先,生成报表页面,即常规页面;

  然后把页面转换成图片(使用的组件HTML2canvas

  最后将图片导出为PDF (jspdf,使用的组件)。

  

安装依赖

  NP install-保存HTML2画布//页面到图片

  m安装js pdf-保存//图像到pdf

  

页面转图片

  创建新的index.vue页面:

  模板

  div ref=pdf

  这是要转换的页面,单击

  button @ click= handle export export/按钮完成导出操作。

  /div

  /模板

  脚本

  从 @/util/pdf.js//tool方法导入{下载pdf},导出操作

  导出默认值{

  名称: pdf ,

  data() {

  return { };

  },

  方法:{

  handleExport(){

  下载PDF(这个。$refs.pdf)

  }

  }

  };

  /脚本

  页面很简单,一个段落加一个导出按钮。整页设置了别名(ref="PDF "),导出时通过别名导出整页。

  在按钮单击事件中调用工具方法downloadPDF(),该方法来自工具类pdf.js:

  从“html2canvas”导入html 2 can vas;

  导出常量下载PDF=page={

  html2canvas(第页)。然后(函数(画布){

  page.appendChild(画布);

  });

  };

  也很简单。首先介绍了html2canvas,定义了downloadPDF方法。接受一个参数就是要导出的内容,可以用id或者ref获取。

  运行结果:

  当我们单击export按钮时,我们向现有页面添加了一行相同的内容。通过元素检查器,可以看到添加的内容实际上是一个画布图像,里面的按钮已经不可操作了。

  这样就完成了图像逐页转换的过程。

  

图片转PDF

  首先转换index.vue为了让我们导出的pdf更好看,我们用el-table做了一个表格。其他导出逻辑保持不变:

  模板

  div ref=pdf

  el表

  :data=tableData

  style=width: 700px

  El-表格-列

  prop=date

  Label=时间

  宽度=180

  /El-表格-列

  El-表格-列

  prop=name

  Label= name

  宽度=180

  /El-表格-列

  El-表格-列

  prop=地址

  Label=跟我说话

  /El-表格-列

  /el-table

  Button @click=handleExport 导出/button

  /div

  /模板

  脚本

  从 @/util/pdf.js//tool方法导入{下载pdf},导出操作

  导出默认值{

  名称: pdf ,

  data() {

  返回{

  表数据:[{

  日期:“昨天”,

  姓名:刘德华,

  地址:你真帅

  }, {

  日期:“今天”,

  姓名:“郭富城”,

  地址:你最帅

  }, {

  日期:“明天”,

  姓名:张学友,

  地址:‘你是贼又帅’

  }, {

  日期:“每天”,

  名字:“黎明”,

  地址:‘我没你帅’

  }]

  };

  },

  方法:{

  handleExport(){

  下载PDF(这个。$refs.pdf)

  }

  }

  };

  /脚本

  效果图:

  然后转换pdf.js,添加pdf转换逻辑。

  从“html2canvas”导入html 2 can vas;

  从“jsPDF”导入jsPDF;

  导出常量下载PDF=page={

  html2canvas(第页)。然后(函数(画布){

  canvas2PDF(画布);

  });

  };

  const canvas2PDF=canvas={

  设contentWidth=canvas.width

  设contentHeight=canvas.height

  设imgHeight=contentHeight

  设imgWidth=contentWidth

  //第一个参数:L:水平P:垂直

  //第二个参数:度量单位( pt , mm , cm , m , in 或 px )

  let pdf=new jsPDF(l , pt );

  pdf.addImage(

  canvas.toDataURL(image/jpeg ,1.0),

  JPEG ,

  0,

  0,

  imgWidth,

  图片高

  );

  Pdf.save(导出。pdf’);

  };

  canvas2pdf方法创建一个jspdf实例,然后添加上一步生成的图像,最后保存导出的PDF文件。

  导出的文件效果:

  

A4打印适配

  因为有些需要生成的页面需要打印在A4纸上,所以不能如上设置pdf生成的宽度和高度。需要根据A4纸的大小比例进行调整(其他打印要求相同,使用相应的纸张比例即可)

  然后转换pdf.js

  从“html2canvas”导入html 2 can vas;

  从“jsPDF”导入jsPDF;

  导出常量下载PDF=page={

  html2canvas(第页)。然后(函数(画布){

  canvas2PDF(画布);

  });

  };

  const canvas2PDF=canvas={

  设contentWidth=canvas.width

  设contentHeight=canvas.height

  //a4纸尺寸[595.28,841.89],pdf中html页面生成的画布的宽度和高度

  设imgWidth=595.28

  设img height=592.28/content width * content height;

  //第一个参数:L:水平P:垂直

  //第二个参数:度量单位( pt , mm , cm , m , in 或 px )

  let pdf=new jsPDF(p , pt );

  pdf.addImage(

  canvas.toDataURL(image/jpeg ,1.0),

  JPEG ,

  0,

  0,

  imgWidth,

  图片高

  );

  Pdf.save(导出。pdf’);

  };

  这里,imgWidth和imgHeight按照A4纸张比例调整后,导出的pdf可以正常比例打印。

  

总结

  这就是这篇关于在Vue页面上生成PDF的文章。更多相关Vue页面生成PDF内容,请搜索我们之前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: