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

前言

想要做全文字笔迹查验索引擎,则须求将word/pdf等文书档案内容提抽取来。对于pdf有xpdf等一些开源方案。

但Word文书档案的情形则会复杂一些。

领取PDF文本内容

XPDF是三个免费开源的软件,用于显示PDF文件,并可将pdf调换来文字图片等,相同支撑Windows版。在Debian
Linux上安装极度轻松:

apt-get install xpdf

咱俩那边只使用pdftotext这一个意义,直接输入可查看帮衬:

[email protected]:/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

测试一下:

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

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

用antiword提取 .doc 的内容

咱俩那边运用了 antiword
开源软件,来领取word2002从前版本的剧情,安装同样特别轻松:

apt-get install antiword

翻开支持:

[email protected]:/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中:

[email protected]:/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的库,

如:

 

 

等。

总结

以上正是那小说的全体内容了,希望本文的源委对大家的就学大概职业能带动一定的帮衬,如有疑问我们能够留言调换,多谢大家对帮客之家的支撑。

前言
想要做全文字笔迹核实索引擎,则必要将word/pdf等文书档案内容提抽取来。对于pdf有…

前言

前言

程序导出word文书档案的格局

将web/html内容导出为world文书档案,再java中有比相当多应用方案,举个例子利用Jacob、Apache
POI、Java2Word、iText等各类办法,以及使用freemarker那样的模板引擎那样的点子。php中也许有局地一面如旧的主意,但在python司令员web/html内容生成world文书档案的章程是非常少的。个中最倒霉化解的便是怎么样将应用js代码异步获取填充的数码,图片导出到word文书档案中。

想要做全文字笔迹核算索引擎,则需求将word/pdf等文档内容提收取来。对于pdf有xpdf等部分开源方案。

方今有一个case。供给去分析word文书档案。有五个需求,一个是将word文书档案转成PDF,三个是将word文书档案中的内容依照一定的正式读取到数据库中,去npm酒馆找了大意上有贰12个包,发掘根本是通过以下的秘诀来调换代码。

1. unoconv

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

  1. 通过调用系统底层程序(比方说office)的API来改变;
  2. 透过沙盘,替换数据来落到实处生成PDF;
  3. 由此有个别无需付费将word转成PDF的网址来促成将word转成PDF,举个例子docx-to-pdf;

功能:

1.接济将本地html文书档案转变为docx格式的文书档案,所以供给先将网页中的html文件保留到地头,再调用unoconv进行转移。转变职能也不利,使用办法特别轻松。

\# 安装
sudo apt-get install unoconv
\# 使用
unoconv -f pdf *.odt
unoconv -f doc *.odt
unoconv -f html *.odt

领取PDF文本内容

新兴退而求其次,想经过先将docx转成文字,开掘了个textract的包。

缺点:

1.不得不对静态html实行改造,对于页面中有使用ajax异步获取数据的地方也不可能改变(重借使要确认保证从web页面保存下来的html文件中有数据)。
2.只可以对html进行更动,如若页面中有使用echarts,highcharts等js代码生成的图样,是无力回天将那个图片转变来word文书档案中;
3.生成的word文书档案内容格式不轻巧调节。

XPDF是三个无偿开源的软件,用于体现PDF文件,并可将pdf转换来文字图片等,同样支持Windows版。在Debian
Linux上设置非常轻松:

当然也会有劣点,不帮衬docx中的标题号,不帮助图片等公事。

2. python-docx

apt-get install xpdf

不怕死的自个儿说了算自身干这件专门的职业。

功能:

1.python-docx是二个能够读写word文档的python库。

我们那边只利用pdftotext那些意义,直接输入可查看扶助:

介绍

动用方法:

1.获得网页中的数据,使用python手动排版增多到word文书档案中。

from docx import Document
from docx.shared import Inches
document = Document()
document.add_heading('Document Title', 0)
p = document.add_paragraph('A plain paragraph having some ')
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True
document.add_heading('Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='IntenseQuote')
document.add_paragraph(
    'first item in unordered list', style='ListBullet'
)
document.add_paragraph(
    'first item in ordered list', style='ListNumber'
)
document.add_picture('monty-truth.png', width=Inches(1.25))
table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for item in recordset:
    row_cells = table.add_row().cells
    row_cells[0].text = str(item.qty)
    row_cells[1].text = str(item.id)
    row_cells[2].text = item.desc
document.add_page_break()
document.save('demo.docx')

from docx import Document
from docx.shared import Inches
document = Document()
for row in range(9):
    t = document.add_table(rows=1,cols=1,style = 'Table Grid')
    t.autofit = False #很重要!
    w = float(row) / 2.0
    t.columns[0].width = Inches(w)
document.save('table-step.docx')
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

实则docx便是三个zip包,然后装进了有个别xml文件。能够直接将docx的包改后缀为.zip来打开观看。

缺点:

1.功用特别弱。有好多限制比方不辅助模板等,只能生成轻易格式的word文书档案。