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 [email protected]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);

这样就顺利解决了!

原文地址:https://www.cnblogs.com/binguo666/p/10661914.html

时间: 2024-10-26 03:43:37

windows&lunix下node.js实现模板化生成word文件的相关文章

《Node.js入门》Windows 7下Node.js Web开发环境搭建笔记

近期想尝试一下在IBM Bluemix上使用Node.js创建Web应用程序.所以须要在本地搭建Node.js Web的开发測试环境. 这里讲的是Windows下的搭建方法,使用CentOS 的小伙伴请參考:<Node.js入门>CentOS 6.5下Node.js Web开发环境搭建笔记 Node.js是什么? 我们看看百科里怎么说的? JavaScript是一种执行在浏览器的脚本,它简单,轻巧.易于编辑,这样的脚本通经常使用于浏览器的前端编程.可是一位开发人员Ryan有一天发现这样的前端式

Windows环境下Node.js环境搭建

1.Node.js下载与安装 https://nodejs.org/zh-cn/download/ Windows现在windows安装包(.msi),现在后手动安装,安装目录无要求,选项默认即可 2.项目中安装 cmd到项目文件夹,输入以下命令回车执行 npm install npm install -g grunt-cli 3.监控 项目开发时,cmd到项目文件夹,输入以下命令 grunt watch 监控manifest.json,代码保存后会自动打包. 原文地址:https://www.

windows下node.js+sublime中安装coffeescript

node.js中安装Coffeescript 1.我的node.js安装目录 2.node.js 全局模块所在目录 3.node.js安装coffeescript 1 npm install -g coffee-script 至此理论上node.js中已经安装好coffeescript编译器了,不过我第二次安装时遇到了问题,就是-w参数使用时会报错,Error:watch EINVAL 我在第一安装时,没遇到任何问题,不过那个时候,没有明确的安装步骤.当时找到的一些资料讲的并不明确.不过-c参数

Windows 下 Node.js 入门

例子工程在此下载 Windows 下 Node.js 入门 NodeJS的历史就不说了,别人说过了.最最关键Google JavaScript V8 开发成功,运行效率很高,开放二次开发接口(C++库,功能类似常见的Lua,Python等脚本的的开放库).本来V8主要给Chrome浏览器服务的,经不住运行效率太优秀了,所以就有人动起了开发Native端的JavaScript运行环境的主意.NodeJS是这个思路的产物. 这是官网 https://nodejs.org/ 英文 https://no

win 环境下 node.js环境变量

 在win 环境下 node.js环境变量有两种情况:  (1)开发环境(development):开发环境是程序猿们专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告. (2)生产环境(production):是指正式提供对外服务的,一般会关掉错误报告,打开错误日志. 代码: if (process.env.NODE_ENV === 'production') { //在生产情况下做怎样的处理 /* 你的代码*/} else { //在开发环境下做怎样的处理 /*

怕忘记-windows 2003服务器安装Node.js NPM

现在高版本的Nodejs安装已经自带了NPM模块,本次我需要安装的是:supervisor 执行命令: npm install -g supervisor 等待安装完成. 查看版本可以cmd里面运行: node -v 纯笔记.记性不好,记录点东西! 怕忘记-windows 2003服务器安装Node.js NPM

node.js ejs模板引擎将后端数据赋值给前端js

使用node.js的Express脚手架生成项目默认是jade模板引擎,jade引擎实在是太难用了,这么难用还敢设为默认的模板引擎,过分了啊!用handlebars模板引擎写还说的过去,但笔者更愿意使用ejs,选它是因为跟Asp.Net的模板引擎有点相似吧. 先来看一下这几个模板引擎: jade模板 html head title #{title} meta(charset="UTF-8") body div.description #{description} ul - each d

&lt;亲测&gt;CentOS 7.3下Node.js 8.6安装配置(含NPM以及PM2)

CentOS 7.3下Node.js 8.6安装配置 2017年09月30日 14:12:02 阅读数:2245更多 个人分类: Nodejs 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/mawenwu1983/article/details/78142253 1.官网下载 https://nodejs.org/en/download/current/ https://nodejs.org/dist/v8.6.0/node-v8.6.0-li

velocity模板技术生成word文档

本文介绍采用velocity技术在Java中生成word文档的方法. 1.新建一个word文档,编辑内容如下: 2.将上述word文档另存为htm格式的文件 3.新建一个Java Project项目velocityTest,加入Velocity所依赖的Jar包velocity-dep-1.5-beta2.jar. 4.在src目录下新建一个velocity.vm文件,将第二步生成的velocity.htm用文本编辑器打开,复制内容到velocity.vm中.内容如下: <html xmlns:v