vue导出html、word和pdf的实现代码


Posted in Javascript onJuly 31, 2018

导出的页面组件如下:

<template>
 <div id="resumeId">
 <resumeHtml ref="resume" @on-download="download"/>
 </div>
</template>

1、导出html

方法:

1)获取要导出的组件页面的css把它设置成js变量一文本并通过export导出

2)获取要导出组件页面的html的dom标签代码,通过this.$refs.resume.$el.innerHTML获取,也可以通过document.getElementById('resumeId')获得

3)构造html页面,并使用createObjectURL构造一个文件流并下载,如下:

var a = document.createElement('a');
 var url = window.URL.createObjectURL(new Blob([content],
 { type: (option.type || "text/plain") + ";charset=" + (option.encoding || 'utf-8') }));
 a.href = url;
 a.download = fileName || 'file';
 a.click();
 window.URL.revokeObjectURL(url);

具体代码如下:    

import axios from 'axios'
import resumeHtml from './resume-html'
import writer from 'file-writer';
import {resumecss} from '@/assets/style/download/resume.css.js'
...
 downloadHtml(name){ 
 let html = this.getHtmlContent();
 let s = writer(`${name}的简历.html`, html, 'utf-8');
 console.log('s stream',s);
 },
getHtmlContent(){
 const template = this.$refs.resume.$el.innerHTML; 
 let html = `<!DOCTYPE html>
 <html>
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width,initial-scale=1.0">
 <title>X-Find迅聘选才</title>
 <link rel="stylesheet" href="https://cdn.bootcss.com/iview/2.14.0/styles/iview.css" />
 <style>
 ${resumecss}
 </style>
 </head>
 <body>
 <div class="resume_preview_page" style="margin:0 auto;width:1200px">
 ${template}
 </div>
 </body>
 </html>`;
 return html;
 }

导出的样式js文件:

export const resumecss =`
html,
body {
 position: relative;
 height: 100%;
}

.page_layout {
 position: relative;
 height: 100%;
 display: flex;
 & .layout_content {
 flex-grow: 1;
 display: flex;
 flex-direction: column;
 }
}
...

2、导出Word

方法:

1)使用上面构造好的html文本,以文件流的形式发送到后台,后台通过转换得到word流传给前端并下载

let url = `${this.$url}/uploadFile/uploadResume`;
 let html = this.getHtmlContent();
 // 构造blob文件流
 let html_ = new Blob([html],{ "type" : "text/html;charset=utf-8" })
 let formdata = new FormData();
 formdata.append('file', html_, `sdf.html`);//sdf.html是设置文件名
 axios({
 method: 'post',
 url: url,
 data:formdata,
 responseType:'blob',//这里如果不设置,下载会打不开文件
 })
 .then(res=>{
 console.log('download res',res);
 //通过后台返回 的word文件流设置文件名并下载
 var blob = new Blob([res.data], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8'}); //application/vnd.openxmlformats-officedocument.wordprocessingml.document这里表示doc类型
 var downloadElement = document.createElement('a');
 var href = window.URL.createObjectURL(blob); //创建下载的链接
 downloadElement.href = href;
 downloadElement.download ='s.doc'; //下载后文件名
 document.body.appendChild(downloadElement);
 downloadElement.click(); //点击下载
 document.body.removeChild(downloadElement); //下载完成移除元素
 window.URL.revokeObjectURL(href); //释放掉blob对象
 })

3、导出PDF

方法:

1)创建一个htmlToPdf.js文件,如下代码

// 下面两个package要单独安装
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'

export default{
 install (Vue, options) {
 Vue.prototype.getPdf = function (id,title) {
 html2Canvas(document.querySelector(`#${id}`), {
 // allowTaint: true
 useCORS:true//看情况选用上面还是下面的,
 }).then(function (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
 let pageData = canvas.toDataURL('image/jpeg', 1.0)
 let PDF = new JsPDF('', 'pt', 'a4')
 if (leftHeight < pageHeight) {
 PDF.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight)
 } else {
 while (leftHeight > 0) {
 PDF.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
 leftHeight -= pageHeight
 position -= 841.89
 if (leftHeight > 0) {
 PDF.addPage()
 }
 }
 }
 PDF.save(title + '.pdf')
 }
 )
 }
 }
}

2)main.js文件中添加如下代码:

import htmlToPdf from '@/utils/htmlToPdf'
Vue.use(htmlToPdf)

3)然后就可以在要导出pdf文件组件里面添加 如下 代码即可导出

this.getPdf('resumeId',name)

vue导出html、word和pdf的实现代码

vue导出html、word和pdf的实现代码

vue导出html、word和pdf的实现代码

vue导出html、word和pdf的实现代码

总结:

1、虽然完成了三种文件的导出但是我对word和html导出还是不满意,不是最佳解决方法,如果 有人有更好的方法,欢迎留言

2、导出的word没有了样式,所以这块还是有问题

引用 :

1、https://stackoverflow.com/questions/43537121/how-to-get-html-content-of-component-in-vue-js

2、file-writer

3、nodejs(officegen)+vue(axios)在客户端导出word文档

4、Vue导出页面为PDF格式

5、vue实现word,pdf文件的导出

以上所述是小编给大家介绍的vue导出html、word和pdf的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
经典的解除许多网站无法复制文字的绝招
Dec 31 Javascript
Opacity.js
Jan 22 Javascript
学习并汇集javascript匿名函数
Nov 25 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
May 30 Javascript
JS不间断向上滚动效果代码
Dec 25 Javascript
逻辑表达式中与或非的用法详解
Jun 06 Javascript
JavaScript获取服务器时间的方法详解
Dec 11 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
May 06 Javascript
vee-validate vue 2.0自定义表单验证的实例
Aug 28 Javascript
记一次vue-webpack项目优化实践详解
Feb 17 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
Apr 17 Javascript
js实现文章目录索引导航(table of content)
May 10 Javascript
JavaScript函数节流和函数去抖知识点学习
Jul 31 #Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
Jul 31 #Javascript
微信网页授权并获取用户信息的方法
Jul 30 #Javascript
axios简单实现小程序延时loading指示
Jul 30 #Javascript
JS实现HTML页面中动态显示当前时间完整示例
Jul 30 #Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
Jul 30 #Javascript
js+html5实现手机九宫格密码解锁功能
Jul 30 #Javascript
You might like
一个域名查询的程序
2006/10/09 PHP
php简单浏览目录内容的实现代码
2013/06/07 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
2014/07/08 PHP
php cli配置文件问题分析
2015/10/15 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
php打包压缩文件之ZipArchive方法用法分析
2016/04/30 PHP
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
用JavaScript获取页面文档内容的实现代码
2016/06/10 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
JavaScript中自带的 reduce()方法使用示例详解
2016/08/10 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
Python赋值语句后逗号的作用分析
2015/06/08 Python
对Tensorflow中的矩阵运算函数详解
2018/07/27 Python
python 解压pkl文件的方法
2018/10/25 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
Python3.0 实现决策树算法的流程
2019/08/08 Python
Python pip 安装与使用(安装、更新、删除)
2019/10/06 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
英国电子产品购物网站:Tech in the basket
2019/11/08 全球购物
语文教学感言
2014/02/06 职场文书
九年级政治教学反思
2014/02/06 职场文书
大学生军训感想
2014/02/16 职场文书
股东协议书
2014/04/14 职场文书
安全施工标语
2014/06/07 职场文书
《我是什么》教学反思
2016/02/16 职场文书
2019年“红色之旅”心得体会1000字(3篇)
2019/09/27 职场文书
七年级话题作文之执着
2019/11/19 职场文书