Vue网页html转换PDF(最低兼容ie10)的思路详解
作者:冷藏封 发布时间:2024-06-07 15:25:12
标签:vue,html,PDF
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)的思路详解网站的支持!
来源:http://www.cnblogs.com/forever0608/archive/2017/08/23/7419422.html


猜你喜欢
- 我有的时候写程序要用到当前时间,我就想用python去取当前的时间,虽然不是很难,但是老是忘记,用一次丢一次,为了能够更好的记住,我今天特意
- 自己搭建IP数据库占资源,而且更新不便,何不使用现成的IP查询呢?下面自己写了个获取IP物理地址的PHP代码(有一定的瑕疵,请高手不吝赐教)
- php简介当前网络技术发展日新月异,各种基于服务端创建 * 站的脚本语言更是层出不穷。其中PHP以其简单、易用、可移植性强等特点,在众多的动
- 前言写爬虫的小伙伴可能遇到过这种情况:正当悠闲地喝着咖啡,满意地看着屏幕上的那一行行如流水般被爬下来的数据时,突然一个Error弹出,提示抓
- 在mysql中利用select语句的一个特性就可以很方便地实现查询结果的分页,select语句的语法:SELECT [STRAIGHT_JO
- for循环在Python中有遍历所有序列的项目,如列表或一个字符串。语法:for循环语法如下:for iterating_var
- asp之家注:学习asp网页编程的朋友一定用过ACCESS数据库,access的简单方便,大大降低了asp初学者学习asp的门槛,对于学习a
- 本文实例讲述了Sanic框架蓝图用法。分享给大家供大家参考,具体如下:蓝图是可以用于应用程序内子路由的对象。蓝图并未向应用程序内添加路由,而
- <html><head><meta http-equiv="Content-Type" c
- 多线程类似于同时执行多个不同程序,多线程运行有如下优点:使用线程可以把占据长时间的程序中的任务放到后台去处理。用户界面可以更加吸引人,比如用
- 说明本文根据https://github.com/liuchengxu/blockchain-tutorial的内容,用python实现的,
- 本文实例讲述了Python贪心算法。分享给大家供大家参考,具体如下:1. 找零钱问题:假设只有 1 分、 2 分、五分、 1 角、二角、 五
- 先按照下面的表结构创建mysql_order_by_test数据表,我们用实例一点一点告诉你,MySQL order by的用法。ORDER
- 前面的话数组是一组按序排列的值,相对地,对象的属性名称是无序的。从本质上讲,数组使用数字作为查找键,而对象拥有用户自定义的属性名。javas
- 前言ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、f
- 我们都知道 vue 中可以使用 modal 来实现 input 内容数据的双向绑定。小程序好像没有提供相应的方法支持,就需要我们自己写了。原
- 前言嗨喽!大家好呀,这里是魔王~雪球,聪明的投资者都在这里 - 4300万投资者都在用的投资社区,沪深港美全球市场实时行情,股票基金债券免费
- MySQL的sql_mode合理设置sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些
- 求最大公约数是习题中比较常见的类型,下面小编会给大家提供五种比较常见的算法,记得帮忙点个赞哦!一般来说,最大公约数的求法大概有5种方法一:短
- 先写一个SQLSELECT DISTINCT from_idFROM codWHERE cod.from_id NOT IN (37, 56