windows&lunix下node.js实现模板化生成word文件
最近在做了一个小程序!里面有个功能就是根据用户提交的数据,自动生成一份word文档返回给用户。我也是第一次做这功能,大概思路就是先自己弄一份word模板,后台接受小程序发过来的数据,再根据这些数据将相应内容写入到相应位置,再将生成word文档的地址返回给前台,前台再根据返回的URL访问服务器的上对应资源。
由于我的后台用的是node.js 毕竟算是新生语言,插件还是比较少。所以在这里总结一下,以便以后再次用到方便查看。
在windows上动态生成模板word文档。
在windows上实现这个倒是挺容易,因为windows上装有了office这些解析word文档的软件,直接可以进行读写。
这里用到的插件是docx-templates ,直接npm 下载安装就行。
使用起来也挺简单,一开始要声明插入的变量 ,然后根据变量位置直接替换你想要的数据即可。
word模板文件:
+++QUERY
query getData() {
userId
userName
userSummary
userImg
}
+++ 用户ID: +++=userId+++
用户名: +++=userName+++
用户介绍:+++=userSummary+++
用户头像: +++=userImg+++
node.js实现
先在当前文件夹安装docx-templates插件
npm install docx-templates
后端代码
let createReport = require('docx-templates');
createReport({
template: path.join(__dirname, '../data/template/模板2.docx'),
output: path.join(__dirname, '../data/out/结果2.docx'),
data: {
userId: '24',
userName: '斌果',
userSummary: '我介绍你个鬼哟!',
userImg: {
width: 6,
height: 6,
path: path.join(__dirname, '../data/image1.png'),
extension: '.png'
}
}
});
在Lunix上动态生成模板word文档。
首先,容我说下在lunix上处理遇到的坑吧!
由于lunix系统的处理.docx文件的格式和window下不同,没有office帮我们解析文件,我们是无法正常打开,要使用xzvf解压后才能看到.docx文件的真面目。
当我tar了下.docx文件之后

what???? 这是什么鬼东西 怎么都变成xml格式的呢?
其实,word文档本来就是这个样子,只是在windows下被系统办公软件解析罢了。
然后我不管三七二十一了,直接用windows上的方法,用docx-templates处理。
然后处理是处理了 而且没报错, 但是 生成出来的文件是这样的!

W T F??? 全是十进制乱码!
然后又百度了一下说lunix上读写格式和window不一样,说可以用offenoffice插件对word文档进行解析。
然后我又在服务器上安装配置了openoffice,遇到服务启动不了等各种坑最后貌似成功启动了openoffice服务,
最后发现,W T F 出来的文件还是十进制乱码!。。。。。。。。。。。。。
没办法 只好再去百度,java啊 php啊 python啊 都有,为毛线不见node处理方法。。。。
解决方法
辗转反侧,最后终于找到了解决方法 就是 docxtemplater 而且 它在window和lunix下都可以正常处理
这是官网:https://docxtemplater.readthedocs.io/en/latest/
使用起来也很简单,首页安装docxtemplater
npm install docxtemplater
npm install jszip@2
npm install jszip-utils # only for the browser (webpack)
接着很简单 ,自己创建一份模板文件(因为这个插件主要是用JSON作为数据输入,因此它也可以很容易在其他语言中使用。)
用户ID:{userId}
用户姓名:{userName}
接着直接上代码就好!
let JSZip = require('jszip');
let Docxtemplater = require('docxtemplater');
let fs = require('fs');
let path = require('path');
let content = fs
.readFileSync(path.resolve(__dirname, 'practice1.docx'), 'binary');
let zip = new JSZip(content);
let doc = new Docxtemplater();
doc.loadZip(zip);
doc.setData({
userId: '24',
userName:'斌果'
});
try {
doc.render()
}
catch (error) {
let e = {
message: error.message,
name: error.name,
stack: error.stack,
properties: error.properties,
}
console.log(JSON.stringify({error: e}));
throw error;
}
let buf = doc.getZip()
.generate({type: 'nodebuffer'});
fs.writeFileSync(path.resolve(__dirname, 'output.docx'), buf);
这样就顺利解决了!
windows&lunix下node.js实现模板化生成word文件的更多相关文章
- Windows 7 下 Node.js 连接 Oracle
原创作者: sailtseng 1. 安装 Oracle 11g express 详见: <Windows 7 x64 安装 Oracle 11g Express> 2. 安装 Micr ...
- Windows 7下Node.js Web开发环境搭建笔记
Node.js是什么? 我们看看百科里怎么说的?JavaScript是一种运行在浏览器的脚本,它简单,轻巧,易于编辑,这种脚本通常用于浏览器的前端编程,但是一位开发者Ryan有一天发现这种前端式的脚本 ...
- Windows环境下Node.js环境搭建
1.Node.js下载与安装 https://nodejs.org/zh-cn/download/ Windows现在windows安装包(.msi),现在后手动安装,安装目录无要求,选项默认即可 2 ...
- 《Node.js入门》CentOS 6.5下Node.js Web开发环境搭建笔记
近期想尝试一下英特尔的基于WebRTC协同通信开发套件,所以须要在本地搭建Node.js Web的开发測试环境. 这里讲的是CentOS 下的搭建方法.使用Windows的小伙伴请參考: <No ...
- 如何从Windows中删除Node.js
如何从Windows中删除Node.js: 1.从卸载程序卸载程序和功能. 2.重新启动(或者您可能会从任务管理器中杀死所有与节点相关的进程). 3.寻找这些文件夹并删除它们(及其内容)(如果还有). ...
- win 环境下 node.js环境变量
在win 环境下 node.js环境变量有两种情况: (1)开发环境(development):开发环境是程序猿们专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告. ...
- 1. windows环境安装Node.js
1. 下载 地址: https://nodejs.org/en/ 2. 下载最新版本v6.1.0 Currrent
- <亲测>CentOS 7.3下Node.js 8.6安装配置(含NPM以及PM2)
CentOS 7.3下Node.js 8.6安装配置 2017年09月30日 14:12:02 阅读数:2245更多 个人分类: Nodejs 版权声明:本文为博主原创文章,未经博主允许不得转载. ...
- VUE npm run dev 启动时,报了一大堆错误 Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js 7.x
npm run dev 启动时,报了一大堆错误 Module build failed: Error: Missing binding E:\2017VocaSchool\vocationWeb\no ...
随机推荐
- php中获取用户登陆的IP地址以及常规处理
本文为原创,转载请注明! 在我们开发多站点业务网站中,经常需要获取客户端的ip地址来给用户推荐其所在地址的信息的业务,用php获取客户端的ip地址,我们一般用到的PHP内置方法是$_SERVER[' ...
- 部署网站: 配置项目到iis上运行报目录错误
配置项目到iis上运行报目录错误 以下三种方法可使用: 1.添加文件访问权限 everyone (线上环境慎用) 2.重新注册iis 3.web.config 加一段话 在<system.we ...
- 使用MongoDB存储集合的一些问题
这两天在工作中被Mongo集合存储给整得头大,当然也是我的认知太浅,所以下面我来分享下我所遇到的这个问题希望有大佬能给出更好的解决方案, 1.需求: 存储一个从前端接收未知数据类型的集合 例: 由于是 ...
- flask完成文件上传功能
在使用flask定义路由完成文件上传时,定义upload视图函数 from flask import Flask, render_template from werkzeug.utils import ...
- 免费Git客户端:sourcetree详细介绍
一.简介:一个用于Windows和Mac的免费Git客户端.Sourcetree简化了如何与Git存储库进行交互,这样您就可以集中精力编写代码.通过Sourcetree的简单Git GUI可视化和管理 ...
- mysql为何不支持开窗函数?
引用 在开窗函数出现之前存在着非常多用 SQL 语句非常难解决的问题,非常多都要通过复杂的相关子查询或者存储过程来完毕.为了解决这些问题,在2003年ISO SQL标准增加了开窗函数,开窗函数的使用使 ...
- Nginx安装及配置
Nginx是一款速度快,功能强大的http以及反向代理服务器,经过简单的配置之后即可以用来托管页面. 不幸的是,和很多其他系统管理工具一样,相关的原理教程和配置说明文档都很少.虽然官方提供了一个wik ...
- 关于内核转储(core dump)的设置方法
原作者:http://blog.csdn.net/wj_j2ee/article/details/7161586 1. 内核转储作用 (1) 内核转储的最大好处是能够保存问题发生时的状态. (2) 只 ...
- SSM-SpringMVC-05:SpringMVC视图解析器InternalResourceViewResolver配置
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 视图解析器------默认就有配置,但是默认的在实际使用过程中有很多不方便的地方,所以我们配置一道视图解析器 ...
- DropZone(文件上传插件)
1. html文件 dropzone的原理是模拟表单来上传文件,html中的元素有多重形式. 可以建立一个form表单: <form id="dropz" action=&q ...