js导出变量 vue_vue导出html、word和pdf的实现代码

该博客介绍了如何在Vue项目中实现导出组件为HTML、Word和PDF文件的方法。首先,导出HTML是通过获取组件的CSS和HTML内容,构造新的HTML页面并使用createObjectURL下载。导出Word则是将HTML内容发送到后台转换为Word文件流再下载。最后,导出PDF利用html2canvas和jspdf库将HTML转为canvas,然后生成PDF并保存。然而,博主对Word导出的样式不满意,希望有更好解决方案。
摘要由CSDN通过智能技术生成

导出的页面组件如下:

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 = `

x-find迅聘选才

${resumecss}

${template}

`;

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)

总结:

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

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

引用 :

1、

2、

3、

5、

以上所述是小编给大家介绍的vue导出html、word和pdf的实现代码,希望对大家有所帮助

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

可以使用docxtemplater库将Vue生成的HTML模板转换为Word文档。下面是一个简单的示例: 1. 安装docxtemplater ``` npm install docxtemplater --save ``` 2. 创建一个Word模板 在Word中创建一个模板文件,然后将占位符插入到需要动态替换的位置。例如,将`{{name}}`作为占位符插入到需要动态插入名字的位置。 3. 创建Vue组件 在Vue组件中,使用HTML模板和data属性来定义要插入到模板中的变量。例如: ``` <template> <div> <h1>{{ title }}</h1> <p>{{ content }}</p> </div> </template> <script> export default { data() { return { title: "Hello", content: "This is a test" }; } }; </script> ``` 4. 实现导出功能 在组件中添加一个方法,该方法将HTML模板渲染为Word文档并下载。例如: ``` <template> <div> <h1>{{ title }}</h1> <p>{{ content }}</p> <button @click="exportToWord">导出Word</button> </div> </template> <script> import Docxtemplater from "docxtemplater"; import JSZip from "jszip"; import FileSaver from "file-saver"; export default { data() { return { title: "Hello", content: "This is a test" }; }, methods: { exportToWord() { // Load the Word template const xhr = new XMLHttpRequest(); xhr.open("GET", "/path/to/template.docx", true); xhr.responseType = "arraybuffer"; xhr.onload = () => { const data = new Uint8Array(xhr.response); // Use docxtemplater to render the template with Vue data const zip = new JSZip(data); const doc = new Docxtemplater().loadZip(zip); doc.setData({ title: this.title, content: this.content }); doc.render(); // Download the Word document const blob = doc.getZip().generate({ type: "blob" }); FileSaver.saveAs(blob, "document.docx"); }; xhr.send(); } } }; </script> ``` 在上面的代码中,我们使用了docxtemplater、JSZip和FileSaver库来进行Word文档的渲染和下载。当用户点击“导出Word”按钮时,我们会加载Word模板文件,然后使用docxtemplater库将模板渲染为Word文档并下载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值