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 相关文章推荐
jQuery页面滚动浮动层智能定位实例代码
Aug 23 Javascript
node.js中的buffer.toString方法使用说明
Dec 14 Javascript
JavaScript中的比较操作符&gt;、=、
Dec 31 Javascript
js+html5实现canvas绘制镂空字体文本的方法
Jun 05 Javascript
javascript中的previousSibling和nextSibling的正确用法
Sep 16 Javascript
Node.js中路径处理模块path详解
Nov 14 Javascript
jQuery 利用ztree实现树形表格的实例代码
Sep 27 jQuery
通过一次报错详细谈谈Point事件
May 17 Javascript
JavaScript实现的反序列化json字符串操作示例
Jul 18 Javascript
Angularjs实现页面模板清除的方法
Jul 20 Javascript
基于vue中keep-alive缓存问题的解决方法
Sep 21 Javascript
Vue-cli3项目引入Typescript的实现方法
Oct 18 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
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
php 类中的常量、静态属性、非静态属性的区别
2017/04/09 PHP
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
jquery入门—访问DOM对象方法
2013/01/07 Javascript
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
javascript实现别踩白块儿小游戏程序
2015/11/22 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
新手简单了解vue
2019/05/29 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
Python实现的json文件读取及中文乱码显示问题解决方法
2018/08/06 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
python实现函数极小值
2019/07/10 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
python 魔法函数实例及解析
2019/09/25 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
教师业务学习制度
2014/01/25 职场文书
情况说明书格式范文
2014/05/06 职场文书
关爱老人标语
2014/06/21 职场文书
软件测试专业推荐信
2014/09/18 职场文书
初中教师个人工作总结
2015/02/10 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书