Vue网页html转换PDF(最低兼容ie10)的思路详解


Posted in Javascript onAugust 24, 2017

HTML转PDF:

1.页面底层实现——Vue:最低兼容ie10

2.实现思路:

1> 使用html2canvas.js将网页转换为图片

2> 使用jsPdf.debug.js将canvas生成的图片转换为pdf文件

具体实现:

要这样实现首先要引入两个插件:

html2canvas.js

jsPdf.debug.js

注:

因为ie10在canvas截图时候会出现部分样式丢失的情况,所以在代码中有部分修改了页面的样式

所以建议在做截图的时候,将页面代码复制一份到隐藏域,在隐藏域里面做修改,这样就不会修改页面原有样式了

如果大家有更好的方法,欢迎提议

下面上代码:

<script type="text/ecmascript-6">
import co from 'co'
import html2Canvas from '../html2canvas'
import JsPDF from '../jsPdf.debug'
export default {
 title: '用户信息',
 data () {
  return {}
 },
 methods: {
 // 核心代码
  printOut () {


// 获取需要打印的区域,以div为单位,此处使用的是vue的选择器
   let pdfDom = document.querySelector('#pdf-wrap')


// 因为在ie10下,会出现input样式丢失的情况,所以在此处清楚input的标签的边框
   let arrnode = pdfDom.querySelectorAll('input')
   for (var i = 0; i < arrnode.length; i++) {
    arrnode[i].style.border = 'hidden'
   }


// 设置背景色
   pdfDom.style.background = '#FFFFFF'
   let _this = this
   html2Canvas(pdfDom, {
    allowTaint: true, taintTest: false,
    onrendered: function (canvas) {



// 开始canvas截图



// 开始准备工作
     let contentWidth = canvas.width
     let contentHeight = canvas.height
     let pageHeight = contentWidth / 592.28 * 841.89
     let leftHeight = contentHeight
     let position = 0
     let imgWidth = 595.28
     let imgHeight = 592.28 / contentWidth * contentHeight



// 此处图片格式可以是PNG,也可是JPEG,注意:需要考虑Browser支持的图片格式
     let pageData = canvas.toDataURL('image/PNG', 1)
     pdfDom.style.display = 'none'



// 开始将图片转换为PDF



// 设置纸张大小,方向
     let PDF = new JsPDF('', 'pt', 'a4')
     if (leftHeight < pageHeight) {
      PDF.addImage(pageData, 'PNG', 0, 0, imgWidth, imgHeight)
     } else {
      while (leftHeight > 0) {
       PDF.addImage(pageData, 'PNG', 0, position, imgWidth, imgHeight)
       leftHeight -= pageHeight
       position -= 841.89
       if (leftHeight > 0) {
        PDF.addPage()
       }
      }
     }



// 保存PDF
     PDF.save(_this.userInfo.card_id + '-' + _this.userInfo.user_name + '.pdf')
    }
   })
   html2Canvas()
  }
 },
 ready () {
 }
}
</script>

总结

以上所述是小编给大家介绍的Vue网页html转换PDF(最低兼容ie10)的思路详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
微博@符号的用户名提示效果。(想@到谁?)
Nov 05 Javascript
apycom出品的jQuery精美菜单破解方法
Feb 18 Javascript
ModelDialog JavaScript模态对话框类代码
Apr 17 Javascript
window.onresize 多次触发的解决方法
Nov 08 Javascript
Javascript技术难点之apply,call与this之间的衔接
Dec 04 Javascript
jQuery实现产品对比功能附源码下载
Aug 09 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
Dec 20 Javascript
基于JavaScript 性能优化技巧心得(分享)
Dec 11 Javascript
JS删除数组里的某个元素方法
Feb 03 Javascript
vue实现自定义多选与单选的答题功能
Jul 05 Javascript
简化版的vue-router实现思路详解
Oct 19 Javascript
javascript canvas实现简易时钟例子
Sep 05 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
Aug 23 #Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
Aug 23 #Javascript
angular2路由切换改变页面title的示例代码
Aug 23 #Javascript
通俗解释JavaScript正则表达式快速记忆
Aug 23 #Javascript
bootstrap fileinput实现文件上传功能
Aug 23 #Javascript
jQuery Position方法使用和兼容性
Aug 23 #jQuery
详解EasyUi控件中的Datagrid
Aug 23 #Javascript
You might like
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
javascript 变量作用域 代码分析
2009/06/26 Javascript
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
javascript模拟的Ping效果代码 (Web Ping)
2011/03/13 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
2015/08/23 Javascript
javascript模块化简单解析
2016/04/07 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
vuex + axios 做登录验证 并且保存登录状态的实例
2018/09/16 Javascript
泛谈JS逻辑判断选择器 || &amp;&amp;
2019/05/24 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
2019/11/14 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
[03:41]2018完美盛典-《Fight With Us》
2018/12/16 DOTA
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
用pandas按列合并两个文件的实例
2018/04/12 Python
Python在for循环中更改list值的方法【推荐】
2018/08/17 Python
python 实现多维数组(array)排序
2020/02/28 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
印度最大的网上花店:Ferns N Petals(鲜花、礼品和蛋糕)
2017/10/16 全球购物
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
送给程序员的20个Java集合面试问题
2014/08/06 面试题
新员工试用期自我鉴定
2014/04/17 职场文书
希特勒的演讲稿
2014/05/23 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
个人德育工作总结
2015/03/05 职场文书
人事行政助理岗位职责
2015/04/11 职场文书
经费申请报告范文
2015/05/18 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书
《刺客之王:C罗全景传记》:时代从来不会亏待手艺人
2019/11/28 职场文书