热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

node实现,下载html、pdf、html(html转word、pdf)

最近项目接到需求,要求下载html、word、pdf的文件,特此记录前端:react(antd)后端:node包:jsdom、html-pdf、html-docx-js

最近项目接到需求,要求下载html、word、pdf的文件,特此记录
前端:react(antd)
后端:node
包:jsdom、html-pdf、html-docx-js


exportDownload () {
其他筛选逻辑处理
const downloadUrl = `后端文件处理api`;
const a = document.createElement('a');
a.href = downloadUrl;
a.download = 前端文件名;
a.style.display = 'none';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}

后端api
我们的html直接是字符串拼接起来的,变量htmlString为我们拼接的字符串
// 导出html
const html = '' + itemThtml + '';
ctx.body = html;
type = 'html';
ctx.set('content-type', 'application/octet-stream');
// 导出word
const docx = HtmlDocx.asBlob(html);
ctx.body = docx;
type = 'docx';
ctx.set('content-type', 'application/msword');
// 导出pdf
const data = await new Promise((res, rej) => {
pdf.create(html, { format: 'A4'}).toBuffer((err, buffer) => {
if (err) rej(err);
res(buffer);
});
});
type = 'pdf';
ctx.body = data;
ctx.set('content-type', 'application/pdf');

注:

  1. html中的canvas元素不能直接在word中显示,所以用JSDOM转成base64的图片,然后插入图片 const dom = new JSDOM(${HtmlString}, { runScripts: 'dangerously' });
  2. 转换之后在不同分辨率的wps中显示不同,但是在word中样式基本一致
  3. 筛选逻辑那里涉及数据库时间的:// 把客户端本地的 utc偏移量传给后端,后端才能把导出的时间变成客户端的本地时间 utcOffset: moment().utcOffset(),

推荐阅读
author-avatar
邹飞邹飞邹飞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有