html转word的原理,vue导出html、word原理

本文介绍了如何在Vue项目中实现HTML页面和Word文档的导出。关键步骤包括将canvas转换为图片、构造完整的HTML内容、转换为blob类型并发送至后台。前端负责将HTML转换为blob,后端则负责将其转化为Word格式,最终前端利用blob进行下载。
摘要由CSDN通过智能技术生成

vue导出html、word原理

日期:2020-06-10

来源:程序思维浏览:1313次

9d86954d5c4d3be52f0629e316879f8a.png

今天给大家说说如何用vue导出html静态页面和word的原理。

由于导出word时,页面样式无法正常使用,因此整体页面采用table布局,仅在几个地方添加style样式,没有其余样式:

/**

* 当页面中有canvas时,我的做法是

* 在页面中预先放置一个src为空的img标签

* 点击导出时,将canvas转为base64,将之前设置的img标签的src修改为base64,同时置空canvas

* 需要注意的是,这种情况下,当结束导出操作时,由于页面中的canvas已经替换为图片,进行获取canvas标签操作时会报错

* 因此需要进行判断

* 当页面中存在canvas标签时,进行转换canvas操作

* 否则直接导出页面内容

*/

var cv = document.getElementsByTagName("canvas")[0]; //获取canvas

var resImg = document.getElementsByClassName("resImg")[0]; //获取包裹canvas的标签

var cimg = document.getElementsByClassName("cimg")[0];//获取空src的img标签

// 将canvas转为图片

var context = cv.getContext("2d");

var srcDataURL = cv.toDataURL("image/png");

cimg.setAttribute("src",srcDataURL);

resImg.innerHTML = "";

let tableConts =document.getElementsByClassName("tablepart")[0].innerHTML;// 获取要导出部分的内容

// 将内容补完为完整的html页面

let html_ = `

${tableConts}

`;

// 将html页面发送至后台进行处理

// 构造blob文件流

let html_ = new Blob([html_],{ "type" : "text/html;charset=utf-8" })

let formdata = new FormData();

formdata.append('file', html_, `sdf.html`);//sdf.html是设置文件名

this.$axios({

method: "post",

data: html_,

headers: {

// 后台要求设置为json,使用时依据后台情况决定

"Content-Type": "application/json"

},

responseType: "blob", //这里如果不设置,下载会打不开文件

url: "http://192.168.0.125:9006/adminQuestion/exportWord"

})

.then(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类型

console.log(blob);

var downloadElement = document.createElement("a");

var href = window.URL.createObjectURL(blob); //创建下载的链接

downloadElement.href = href;

downloadElement.download = "a.doc"; //下载后文件名

document.body.appendChild(downloadElement);

downloadElement.click(); //点击下载

document.body.removeChild(downloadElement); //下载完成移除元素

window.URL.revokeObjectURL(href); //释放掉blob对象

})

.catch(err => {

console.log(err);

});

其实转成word还是要需要和后端程序配合的,前端负责的工作是将html转成blob类型发送给后端,后端转成word格式,前端用blob类型进行下载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用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、付费专栏及课程。

余额充值