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 相关文章推荐
禁止js文件缓存的代码
Apr 09 Javascript
jquery.validate使用攻略 第二部
Jul 01 Javascript
JS中Iframe之间传值的方法
Mar 11 Javascript
Javascript 绘制 sin 曲线过程附图
Aug 21 Javascript
60个很实用的jQuery代码开发技巧收集
Dec 15 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
Nov 07 Javascript
分享JavaScript与Java中MD5使用两个例子
Dec 23 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
Jul 11 Javascript
JavaScript插件Tab选项卡效果
Nov 14 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
Sep 01 Javascript
详解CocosCreator消息分发机制
Apr 16 Javascript
JS前端宏任务微任务及Event Loop使用详解
Jul 23 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
将OICQ数据转成MYSQL数据
2006/10/09 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
面向对象的javascript(笔记)
2009/10/06 Javascript
struts2 jquery 打造无限层次的树
2009/10/23 Javascript
也说JavaScript中String类的replace函数
2011/09/22 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
2015/09/15 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
原生js实现数字字母混合验证码的简单实例
2015/12/10 Javascript
jQuery插件支持同一页面被多次调用
2016/02/14 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
jquery与js实现全选功能的区别
2017/06/11 jQuery
JavaScript指定断点操作实例教程
2018/09/18 Javascript
Python中使用SAX解析xml实例
2014/11/21 Python
解决python matplotlib imshow无法显示的问题
2018/05/24 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
Python将QQ聊天记录生成词云的示例代码
2021/02/10 Python
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
城市观光通行证:The Sightseeing Pass
2018/04/28 全球购物
Nike法国官方网站:Nike.com FR
2018/07/22 全球购物
全球性的众包图形设计市场:DesignCrowd
2021/02/02 全球购物
怎样声明子类
2013/07/02 面试题
面向对象编程的优势是什么
2015/12/17 面试题
C#笔试题
2015/07/14 面试题
护士自我鉴定
2013/10/23 职场文书
车间主管岗位职责
2013/11/14 职场文书
婚礼新郎父母答谢词
2014/01/16 职场文书
小学教师评语大全
2014/04/23 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
妈妈别哭观后感
2015/06/08 职场文书
关于五一放假的通知
2015/08/18 职场文书