这里有新鲜出炉的 7 天学会 Node.js,程序狗速度看过来!
Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用 · Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用
这篇文章主要给大家介绍了用十行 node.js 代码读取 docx 文本的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
前言
最近有一个 case。需要去解析 word 文档。有两个需求,一个是将 word 文档转成 PDF,一个是将 word 文档中的内容按照一定的规范读取到数据库中,去 npm 仓库找了大概有十几个包,发现主要是通过以下的方式来转换代码。
后来退而求其次,想通过先将 docx 转成文字,发现了个 textract 的包。
当然也有缺点,不支持 docx 中的标题号,不支持图片等文件。
不怕死的我决定自己干这件事情。
介绍
其实 docx 就是一个 zip 包,然后封装了一些 xml 文件。可以直接将 docx 的包改后缀为. zip 来打开观看。
进入 word 文件夹
里面有几个主要的文件。
打开 document.xml 你就会发现,所有的文本都是用 <w:t> 标签包着的。这个就是本文的关键
代码
首先,需要通过 npm 安装一个能查看 zip 文件的包:adm-zip;
然后,写下下列代码即可
- const fs = require("fs");
- const AdmZip = require('adm-zip'); //引入查看zip文件的包
- const zip = new AdmZip(filePath); //filePath为文件路径
- let contentXml = zip.readAsText("word/document.xml"); //将document.xml读取为text内容;
- let str = "";
- contentXml.match(/<w:t>[\s\S]*?<\/w:t>/ig).forEach((item) = >{
- str += item.slice(5, -6)
- });
- fs.writeFile("./2.txt", str, (err) = >{ //将./2.txt替换为你要输出的文件路径
- if (err) throw err;
- });
最近正在用 node.js 去解析 docx 的工作。先将最简单的写在上面。回头有空再继续分享
最新更新
之前随手写的代码,今天测试发现用更新后的代码比源代码的效率提升十倍以上。
- //原代码
- //str += item.replace("<w:t>","").replace("</w:t>","");
- //更新代码
- str += item.slice(5,-6)
附上测试代码
- var str = "<w:t>sdfjpasif aefnmasd;lf asdfsdf</w:t>";
- var arr = [];
- for(var i=0;i<50000;i++){
- arr.push(str);
- }
- console.time("replactest");
- arr.forEach((item)=>{
- item.replace(/<w:t>/,"").replace(/<\/w:t>/,"");
- });
- console.timeEnd("replactest");
- //replactest: 20.560ms
- console.time("replactest2");
- arr.forEach((item)=>{
- item.replace(/<\/*w:t>/g,"");
- });
- console.timeEnd("replactest2");
- //replactest2: 14.926ms
- console.time("replactest3");
- arr.forEach((item)=>{
- item.replace(/(^<w:t>)|(<\/w:t>$)/g,"");
- });
- console.timeEnd("replactest3");
- //replactest3: 14.402ms
- console.time("slice");
- arr.forEach((item)=>{
- item.slice(5,-6);
- });
- console.timeEnd("slice");
- //slice: 1.718ms
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用 node.js 能带来一定的帮助,如果有疑问大家可以留言交流。
来源: http://www.phperz.com/article/17/0705/326928.html