Vue做pdf文件预览下载,vue页面生成PDF或者word

  Vue做pdf文件预览下载,vue页面生成PDF或者word

  在前端帖子中,经常需要创建和下载一个可视化图表页面的PDF文件。本文主要介绍Vue前端如何实现PDF创建和下载功能的相关信息。有需要的朋友可以参考一下。

  :

目录

   1.安装和导入。2.封装和导出pdf文件方法的配置和详细说明(utils/htmlToPdf.js)。相关组件中的应用效果有待优化。总结思路:用html2canvas把HTML页面转换成图片,然后用jspdf把图片的base64生成pdf文件。

  

1. 安装及引入

  //将页面html转换成图片

  npm安装html2canvas -保存

  //将图片生成为pdf

  npm安装jspdf -保存

  将定义好的实现方法引入到项目的主文件main.js中并注册。

  从“@/utils/htmlToPdf”导入htmlToPdf;

  //使用Vue.use()方法会调用tool方法中的install方法。

  vue . use(htmlToPdf);

  portal:Vue中Vue.use()的原理及应用

  

2. 封装导出 pdf 文件方法

  

配置详解

  设pdf=new jsPDF(p , pt ,[pdfX,pdfY]);

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

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

  第三个参数:可以是以下格式,默认为“a4”。要自定义格式,只需将大小作为一个数字数组传递,例如:[592.28,841.89];

  a0 - a10

  b0 - b10

  c0 - c10

  分升

  信

  政府信函

  合法的

  初级法律

  分类帐

  药片

  信用卡

  Pdf.addPage()向Pdf文档添加新页面,默认为a4。参数如下:

  Pdf.addImage()向Pdf添加图像。参数如下:

  删除页面pdf

  let target page=pdf . internal . getnumberofpages();//获取总页面

  pdf . delete page(target page);//删除目标页面

  保存pdf文档

  pdf . save(` test . pdf `);

  

封装导出 pdf 文件方法(utils/htmlToPdf.js)

  //导出的页面是PDF格式

  从“html2Canvas”导入html2canvas

  从“jspdf”导入JsPDF

  导出默认值{

  安装(Vue,选项){

  vue . prototype . get pdf=function(){

  //下载一个pdf的时候,如果不在页面顶部,PDF的样式就会不对,所以要回到页面顶部再下载。

  let top=document . getelementbyid( pdf DOM );

  如果(顶!=null) {

  top . scrollintoview();

  top=null

  }

  let title=this.exportPDFtitle

  html 2 can vas(document . query selector( # pdf DOM ),{

  allowTaint:真

  }).然后(函数(画布){

  //获取画布canvas的宽度和高度

  设contentWidth=canvas.width

  设contentHeight=canvas.height

  //One page pdf显示html页面生成的画布高度;

  设page height=content width/841.89 * 592.28;

  //不生成pdf的html页面高度

  设leftHeight=contentHeight

  //页面偏移量

  设位置=0;

  pdf中HTML页面生成的画布的宽度和高度(本例为:横向a4纸[841.89,592.28],纵向尺寸需要更改)

  设imgWidth=841.89

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

  let pageData=canvas . toda taurl( image/JPEG ,1.0);

  let PDF=new JsPDF(l , pt , a4 );

  //需要区分两个高度:一个是html页面的实际高度,一个是生成的pdf页面的高度。

  //当内容不超出pdf一页显示的范围时,不需要分页。

  if (leftHeight pageHeight) {

  PDF.addImage(pageData, JPEG ,0,0,imgWidth,imgHeight)

  }否则{

  while (leftHeight 0) {

  PDF.addImage(pageData, JPEG ,0,position,imgWidth,imgHeight)

  left height-=page height;

  位置-=592.28;

  //避免添加空白页

  if (leftHeight 0) {

  pdf . add page();

  }

  }

  }

  PDF.save(标题。pdf’)

  })

  }

  }

  }

  

相关组件中应用

  模板

  div class=wrap

  div id= pdf DOM style= padding:10px;

  el表

  :data=tableData

  边界

  El-table-column prop= date label= date width= 250 /El-table-column

  El-table-column prop= name label= name width= 250 /El-table-column

  El-表格列属性=地址标签=地址/El-表格列

  /el-table

  /div

  button type= button style= margin-top:20px;@click=btnClick 导出PDF/button

  /div

  /模板

  脚本

  导出默认值{

  data() {

  返回{

  RTEXPPDFTITLE:页面导出PDFTITLE名称,

  表格数据:[

  {

  日期:“2016年5月6日”,

  姓名:“王小虎”,

  地址:重庆市九龙坡区火炬大道

  }, {

  日期:“2016年5月7日”,

  姓名:“王小虎”,

  地址:重庆市九龙坡区火炬大道

  },{

  日期:“2016年5月3日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月2日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月4日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月1日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月8日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月6日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月6日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月7日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月1日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月8日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月6日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月7日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月6日”,

  姓名:“王小虎”,

  地址:南京市江宁区将军大道

  }, {

  日期:“2016年5月7日”,

  姓名:“王小虎”,

  地址:南京市江宁区将军大道

  }, {

  日期:“2016年5月4日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月1日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月8日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月6日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月7日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  },{

  日期:“2016年5月1日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月8日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月6日”,

  姓名:“王小虎”,

  地址:“上海市普陀区金沙江路1518弄”

  }, {

  日期:“2016年5月8日”,

  姓名:“王小虎”,

  地址:“武汉市洪山区文化大道”

  }, {

  日期:“2016年5月6日”,

  姓名:“王小虎”,

  地址:“武汉市洪山区文化大道”

  }, {

  日期:“2016年5月7日”,

  姓名:“王小虎”,

  地址:“武汉市洪山区文化大道”

  }, {

  日期:“2016年5月6日”,

  姓名:“王小虎”,

  地址:南京市江宁区将军大道

  }, {

  日期:“2016年5月7日”,

  姓名:“王小虎”,

  地址:“武汉市洪山区文化大道”

  },

  ]

  }

  },

  方法:{

  btnClick(){

  这个。$ next tick(()={ this . get pdf();})

  },

  },

  }

  /脚本

  

效果

  

待优化部分

  分页时,页面内容被截断(欢迎留言讨论交流);

  不同的内容,从新的一页开始;思路:计算超出内容,最后一页的高度(设置间距=页面高度-超出高度)。

  

总结

  关于Vue前端如何生成PDF并下载的这篇文章到此为止。关于Vue前端生成PDF和下载内容的更多信息,请搜索我们之前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

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

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