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


Posted in Javascript onJune 17, 2017

前言

想要做全文搜索引擎,则需要将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 

等。

总结

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

Javascript 相关文章推荐
父窗口获取弹出子窗口文本框的值
Jun 27 Javascript
自己的js工具_Form 封装
Aug 21 Javascript
js 控制图片大小核心讲解
Oct 09 Javascript
JS获取当前网页大小以及屏幕分辨率等
Sep 05 Javascript
SublimeText自带格式化代码功能之reindent
Dec 27 Javascript
jquery ztree实现树的搜索功能
Feb 25 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
Aug 09 Javascript
js本地图片预览实现代码
Oct 09 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
Aug 17 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
Nov 10 Javascript
Vue ​v-model相关知识总结
Jan 28 Vue.js
react 项目中引入图片的几种方式
Jun 02 Javascript
bootstrap paginator分页前后台用法示例
Jun 17 #Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
Jun 17 #Javascript
深入理解Webpack 中路径的配置
Jun 17 #Javascript
详解Vue组件之间的数据通信实例
Jun 17 #Javascript
webpack打包后直接访问页面图片路径错误的解决方法
Jun 17 #Javascript
webpack学习教程之publicPath路径问题详解
Jun 17 #Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
Jun 17 #Javascript
You might like
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
2014/04/24 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
javascript数组的使用
2013/03/28 Javascript
浅析js中取绝对值的2种方法
2013/07/09 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
Jquery显示、隐藏元素以及添加删除样式
2013/08/09 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
2017/04/26 jQuery
JS控制鼠标拒绝点击某一按钮的实例
2017/12/29 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
2021/02/26 Vue.js
浅析Python编写函数装饰器
2016/03/18 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
详解Django中CBV(Class Base Views)模型源码分析
2019/02/25 Python
python爬虫豆瓣网的模拟登录实现
2019/08/21 Python
python读取word 中指定位置的表格及表格数据
2019/10/23 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
python 实现波浪滤镜特效
2020/12/02 Python
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
英国马莎百货官网:Marks & Spencer
2016/07/29 全球购物
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
高级Java程序员面试要点
2013/08/02 面试题
好人好事事迹材料
2014/02/12 职场文书
优秀的导游求职信范文
2014/04/06 职场文书
班级年度安全计划书
2014/05/01 职场文书
护理专业自荐书
2014/06/04 职场文书
校园元旦活动总结
2014/07/09 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
2014司机年终工作总结
2014/12/05 职场文书
复兴之路观后感
2015/06/02 职场文书
党员发展大会主持词
2015/07/03 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书
解决xampp安装后Apache无法启动
2022/03/21 Servers