用C ++ / Qt编写的程序中的RTF / doc / docx文本提取

时间:2009-07-26 14:41:03

标签: c++ windows qt

我正在Qt / C ++编写一些程序,我需要阅读Microsoft Word / RTF / docx文件中的文字。

我正在寻找一些可以进行提取的命令行程序。它可能是几个程序。

我发现最接近的是 DocToText ,但它有几个错误,所以我无法使用它。 我还在PC上安装了Microsoft Word。也许有一些方法可以使用它阅读文本(不知道如何使用COM)?

5 个答案:

答案 0 :(得分:9)

现在,这非常丑陋且非常hacky,但它似乎对我来说是基本的文本提取。显然在Qt程序中使用它你必须为它生成一个进程等,但我一起攻击的命令行是:

unzip -p file.docx | grep '<w:t' | sed 's/<[^<]*>//g' | grep -v '^[[:space:]]*$'

那就是:

unzip -p file.docx : - p ==“解压缩到stdout”

grep'&lt; w:t':抓住包含'&lt; w:t'的行(&lt; w:t&gt;是“text”的Word 2007 XML元素,如据我所知)

sed's /&lt; [^&lt;] &gt; // g'*:删除标签内的所有内容

grep -v'^ [[:space:]] $'*:删除空行

这可能是一种更有效的方法,但它似乎对我使用的几个文档起作用。

据我所知,unzip,grep和sed都有适用于Windows和任何Unix的端口,所以它应该是合理的跨平台。鄙视是一个丑陋的黑客;)

答案 1 :(得分:2)

尝试Apache Tika

答案 2 :(得分:0)

我建议使用COM,因为这会首先打败像Qt这样的便携式库的使用。

您可能希望使用经典catdoc或类似工具,例如wvWare

请注意,尽管catdoc作者声称catdoc在Windows下无效,但仍有posting of 2001 which states the opposite

答案 3 :(得分:0)

要阅读.doc文件,您可以使用structured storage API。 .doc基本上是一个结构化存储库,其中各种流对应于文档的各个部分 请注意,它是一个非常多毛的API,即使使用这个API,一个.doc文件也可能非常混乱。
Ofcouse这仍然只是Windows,但至少它不是COM。只是一个普通的旧C API。

答案 4 :(得分:0)

这可能会有所帮助。它是跨平台的,具有API http://www.winfield.demon.nl/

否则,如果这只是windows,那么iFilter方法就是这样。它将允许您解析系统上具有iFilter的任何内容。以下是此http://the-lazy-programmer.com/blog/?p=8的示例。我已经使用了C#端的iFilter。