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

我正在用Qt / C ++编写一些程序,我需要从Microsoft Word / RTF / docx文件中读取文本。

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

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

现在,这是相当丑陋和漂亮hacky,但它似乎为我的基本文本提取工作。 很显然,要在Qt程序中使用它,你必须为它创建一个进程,但是我一起入侵的命令行是:

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

所以那是:

unzip -p file.docx:-p ==“解压缩到标准输出”

grep'<w:t' :只抓取包含'<w:t'(<w:t>是Word 2007的XML文档元素,据我所知)

sed's / <[^ <] > // g'*:删除标签内的所有内容

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

有可能是一个更有效的方法来做到这一点,但似乎对我已经测试了几个文档的工作。

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

试试Apache Tika

我建议不要使用COM,因为这首先会破坏像Qt这样的便携式库的使用。

您可能想要使用经典的catdoc或类似的工具,如wvWare 。

请注意,尽管catdoc作者声称catdoc在Windows下不起作用,但是在2001年发布了一个相反的说法。

要读取.doc文件,您可以使用结构化存储API 。 .doc基本上是一个结构化的存储库,其中各种流对应于文档的各个部分。
被警告说,这是一个相当多的API,即使使用这个API,一个.doc文件可能是相当凌乱的看看。
Ofcouse这仍然是Windows,但至少它不是COM。 只是一个普通的旧C API。

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

否则,如果这只是Windows,iFilter方法就是要走的路。 它可以让你解析任何有你的系统上的iFilter。 这是http://the-lazy-programmer.com/blog/?p=8的例子&#x3002; 我已经使用了C#结尾的iFilter。