Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容

发布时间 - 2026-01-11 01:55:46    点击率:

前言

想要做全文搜索引擎,则需要将word/pdf等文档内容提取出来。对于pdf有xpdf等一些开源方案。

但Word文档的情况则会复杂一些。

提取PDF文本内容

XPDF是一个免费开源的软件,用于显示PDF文件,并可将pdf转换成文字图片等,同样支持Windows版。在Debian Linux上安装非常简单:

apt-get install xpdf

我们这里只使用pdftotext这个功能,直接输入可查看帮助:

root@raspberrypi:/var/www# pdftotext
pdftotext version 0.26.5
Copyright 2005-2014 The Poppler Developers - http://poppler.freedesktop.org
Copyright 1996-2011 Glyph & Cog, LLC
Usage: pdftotext [options] <PDF-file> [<text-file>]
 -f <int>   : first page to convert
 -l <int>   : last page to convert
 -r <fp>   : resolution, in DPI (default is 72)
 -x <int>   : x-coordinate of the crop area top left corner
 -y <int>   : y-coordinate of the crop area top left corner
 -W <int>   : width of crop area in pixels (default is 0)
 -H <int>   : height of crop area in pixels (default is 0)
 -layout   : maintain original physical layout
 -fixed <fp>  : assume fixed-pitch (or tabular) text
 -raw    : keep strings in content stream order
 -htmlmeta   : generate a simple HTML file, including the meta information
 -enc <string>  : output text encoding name
 -listenc   : list available encodings
 -eol <string>  : output end-of-line convention (unix, dos, or mac)
 -nopgbrk   : don't insert page breaks between pages
 -bbox    : output bounding box for each word and page size to html. Sets -htmlmeta
 -opw <string>  : owner password (for encrypted files)
 -upw <string>  : user password (for encrypted files)
 -q    : don't print any messages or errors
 -v    : print copyright and version info
 -h    : print usage information
 -help    : print usage information
 --help   : print usage information
 -?    : print usage information

测试一下:

root@raspberrypi:/var/www# pdftotext onceai.pdf onceai.txt
root@raspberrypi:/var/www# cat onceai.txt 产品介绍 顽石智能科技(上海)有限公司
....

然后在node.js中使用 child_process直接调用此命令即可,pdftotext会将内容输出以文本文件中,可能需要多一些操作。具体代码略。

用antiword提取 .doc 的内容

我们这里使用了 antiword 开源软件,来提取word2003以前版本的内容,安装同样非常简单:

apt-get install antiword

查看帮助:

root@raspberrypi:/var/www# antiword
 Name: antiword
 Purpose: Display MS-Word files
 Author: (C) 1998-2005 Adri van Os
 Version: 0.37 (21 Oct 2005)
 Status: GNU General Public License
 Usage: antiword [switches] wordfile1 [wordfile2 ...]
 Switches: [-f|-t|-a papersize|-p papersize|-x dtd][-m mapping][-w #][-i #][-Ls]
  -f formatted text output
  -t text output (default)
  -a <paper size name> Adobe PDF output
  -p <paper size name> PostScript output
   paper size like: a4, letter or legal
  -x <dtd> XML output
   like: db (DocBook)
  -m <mapping> character mapping file
  -w <width> in characters of text output
  -i <level> image level (PostScript only)
  -L use landscape mode (PostScript only)
  -r Show removed text
  -s Show hidden (by Word) text

antiword直接将word内容输出到了console中:

root@raspberrypi:/var/www# antiword spec.doc

SYNC Mobile – Ford APA
Project Number: DFYST
Requirements Specification

同样在node.js用child_process调用此命令即可。

解析提取.docx 的内容

对于 docx 文档来说,因基本身就是一个zip文件,只需要在node.js先将其解压,再解析 text.docx\word\document.xml 文件即可。

Github上也有些将docx解析成html的库,

如:

https://github.com/mwilliamson/mammoth.js 

https://github.com/lalalic/docx2html 

等。

总结

以上就是这文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对的支持。


# nodejs  # 读取word文档  # node.js  # pdf  # linux  # Linux C中多线程与volatile变量  # 详谈Linux写时拷贝技术(copy-on-write)必看篇  # Linux编程之ICMP洪水攻击  # 详解Linux系统中网卡MAC地址克隆方法  # Oracle Linux 6.8安装 mysql 5.7.17的详细教程  # NetCore1.1+Linux部署初体验  # linux下tomcat常用操作  # Linux C中sockaddr和sockaddr_in的区别  # 开源  # 文档  # 是一个  # 如有  # 只需  # 要在  # 要将  # 上也  # 产品介绍  # 可将  # 谢谢大家  # 会将  # 转换成  # 先将  # 则会  # 上海  # 文本文件  # 则需  # 测试一下  # 直接输入 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  Python图片处理进阶教程_Pillow滤镜与图像增强  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  北京网站制作的公司有哪些,北京白云观官方网站?  制作企业网站建设方案,怎样建设一个公司网站?  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  简单实现Android文件上传  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  SQL查询语句优化的实用方法总结  深圳网站制作的公司有哪些,dido官方网站?  Bootstrap CSS布局之列表  JS碰撞运动实现方法详解  如何在IIS中配置站点IP、端口及主机头?  Laravel集合Collection怎么用_Laravel集合常用函数详解  Laravel如何与Inertia.js和Vue/React构建现代单页应用  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  JavaScript中的标签模板是什么_它如何扩展字符串功能  linux写shell需要注意的问题(必看)  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  Laravel如何使用模型观察者?(Observer代码示例)  Laravel如何自定义分页视图?(Pagination示例)  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何快速搭建高效简练网站?  如何在香港免费服务器上快速搭建网站?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  Android利用动画实现背景逐渐变暗  Laravel观察者模式如何使用_Laravel Model Observer配置  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何快速查询网址的建站时间与历史轨迹?  详解jQuery中的事件  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  公司网站制作需要多少钱,找人做公司网站需要多少钱?  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  如何在阿里云完成域名注册与建站?  北京专业网站制作设计师招聘,北京白云观官方网站?  如何为不同团队 ID 动态生成多个非值班状态按钮  C语言设计一个闪闪的圣诞树  微信推文制作网站有哪些,怎么做微信推文,急?  如何挑选最适合建站的高性能VPS主机?  黑客如何通过漏洞一步步攻陷网站服务器?  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  Internet Explorer官网直接进入 IE浏览器在线体验版网址  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理