全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

教你用十行node.js代码读取docx的文本

前言

最近有一个case。需要去解析word文档。有两个需求,一个是将word文档转成PDF,一个是将word文档中的内容按照一定的规范读取到数据库中,去npm仓库找了大概有十几个包,发现主要是通过以下的方式来转换代码。

  1. 通过调用系统底层程序(比如说office)的API来转换;
  2. 通过模板,替换数据来实现生成PDF;
  3. 通过有些免费将word转成PDF的网站来实现将word转成PDF,比如docx-to-pdf;

后来退而求其次,想通过先将docx转成文字,发现了个textract的包。

当然也有缺点,不支持docx中的标题号,不支持图片等文件。

不怕死的我决定自己干这件事情。

介绍

其实docx就是一个zip包,然后封装了一些xml文件。可以直接将docx的包改后缀为.zip来打开观看。

进入word文件夹


里面有几个主要的文件。

  1. document.xml 这个就是文档的主要内容
  2. numbering.xml 这个就是标题号,以及标题号的一些属性
  3. styles.xml 这个就是样式列表

打开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能带来一定的帮助,如果有疑问大家可以留言交流。


# nodejs  # 读取文件内容  # 读取文件  # 读取文本文件  # node.js readline和line-reader逐行读取文件方法  # node.js读取命令行参数详解  # node.js通过url读取文件  # node.js使用fs读取文件出错的解决方案  # Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法  # Node.js中读取TXT文件内容fs.readFile()用法  # node.js读取Excel数据(下载图片)的方法示例  # Node.js readline 逐行读取、写入文件内容的示例  # Node.js读取文件内容示例  # node.js读取文件到字符串的方法  # node.js实现逐行读取文件内容的代码  # node.js生成与读取csv文件方法详解  # 转成  # 文档  # 不支持  # 来实现  # 先将  # 都是  # 也有  # 你要  # 退而求其次  # 有几个  # 可以直接  # 找了  # 这篇文章  # 主要内容  # 最简单  # 你就会  # 写在  # 装了  # 十几个  # 数据库中 


相关文章: 儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  如何快速建站并高效导出源代码?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  孙琪峥织梦建站教程如何优化数据库安全?  如何快速搭建虚拟主机网站?新手必看指南  网站专业制作公司有哪些,做一个公司网站要多少钱?  如何在建站主机中优化服务器配置?  平台云上自助建站如何快速打造专业网站?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  建站之星如何助力网站排名飙升?揭秘高效技巧  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  浅析上传头像示例及其注意事项  Swift中swift中的switch 语句  昆明高端网站制作公司,昆明公租房申请网上登录入口?  网站图片在线制作软件,怎么在图片上做链接?  如何用景安虚拟主机手机版绑定域名建站?  宝塔新建站点为何无法访问?如何排查?  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何用美橙互联一键搭建多站合一网站?  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  如何选择高效便捷的WAP商城建站系统?  制作门户网站的参考文献在哪,小说网站怎么建立?  网站制作模板下载什么软件,ppt模板免费下载网站?  图册素材网站设计制作软件,图册的导出方式有几种?  建站之星安装后界面空白如何解决?  自助网站制作软件,个人如何自助建网站?  ,巨量百应是干嘛的?  如何在香港免费服务器上快速搭建网站?  官网网站制作腾讯审核要多久,联想路由器newifi官网  jQuery 常见小例汇总  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  如何通过FTP空间快速搭建安全高效网站?  电商网站制作公司有哪些,1688网是什么意思?  非常酷的网站设计制作软件,酷培ai教育官方网站?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  如何在云虚拟主机上快速搭建个人网站?  如何确认建站备案号应放置的具体位置?  建站之星后台密码遗忘?如何快速找回?  视频网站制作教程,怎么样制作优酷网的小视频?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  青浦网站制作公司有哪些,苹果官网发货地是哪里?  建站之星微信建站一键生成小程序+多端营销系统  北京网站制作公司哪家好一点,北京租房网站有哪些?  免费视频制作网站,更新又快又好的免费电影网站?  如何基于云服务器快速搭建个人网站?  如何通过.red域名打造高辨识度品牌网站?  制作网站公司那家好,网络公司是做什么的?  清除minerd进程的简单方法 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。