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 textarea自动增高并隐藏滚动条
Dec 16 Javascript
JavaScript CSS修改学习第一章 查找位置
Feb 19 Javascript
cookie.js 加载顺序问题怎么才有效
Jul 31 Javascript
jquery选择器之属性过滤选择器详解
Jan 27 Javascript
JavaScript 学习笔记之变量及其作用域
Jan 14 Javascript
JavaScript+CSS无限极分类效果完整实现方法
Dec 22 Javascript
ES6概念 Symbol toString()方法
Dec 25 Javascript
详谈Node.js之操作文件系统
Aug 29 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
Oct 23 Javascript
vue实现微信获取用户信息的方法
Mar 21 Javascript
angular中的post请求处理示例详解
Jun 30 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
Nov 06 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数组遍历的几种常见方式总结
2019/02/15 PHP
this和执行上下文实现代码
2010/07/01 Javascript
JavaScript 高级篇之函数 (四)
2012/04/07 Javascript
js获取事件源及触发该事件的对象
2013/10/24 Javascript
移动节点的jquery代码
2014/01/13 Javascript
使用原生js写的一个简单slider
2014/04/29 Javascript
jQuery的animate函数学习记录
2014/08/08 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
jQuery 3.0十大新特性最终版发布
2016/07/14 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
详解VueRouter进阶之导航钩子和路由元信息
2017/09/13 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
2019/05/15 Javascript
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
Python操作Access数据库基本步骤分析
2016/09/19 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
python如何实现代码检查
2019/06/28 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
python 实现简单的FTP程序
2019/12/27 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
COSETTE官网:奢华,每天
2020/03/22 全球购物
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
个人求职简历的自我评价范文
2013/10/09 职场文书
董事长职责范文
2013/11/08 职场文书
大学生思想汇报范文
2013/12/31 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
事业单位年度考核评语
2014/12/31 职场文书
坎儿井导游词
2015/02/09 职场文书
社区服务活动感想
2015/08/11 职场文书
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
NGINX 权限控制文件预览和下载的实现原理
2022/01/18 Servers