1

Microsoft 已发布 Office 文件的二进制规范。我需要从.Doc 中提取文本。此页面似乎暗示从 Doc 中提取文本并不难,但我不遵循。

MS 文档提取

这就是我到目前为止所拥有的。
wIdent 和 wFib 的值是错误的。请指出我正确的方向。

UInt16 wIdent; // (2 bytes): An unsigned integer that specifies that this is a Word Binary File. This value MUST be 0xA5EC.
UInt16 wFib;   // (2 bytes): An unsigned integer that specifies the version number of the file format used. Superseded by FibRgCswNew.nFibNew if it is present. This value SHOULD<13> be 0x00C1.

using (FileStream fs = File.OpenRead(fileName))
{
    UTF8Encoding utf8 = new UTF8Encoding(true);

    BinaryReader brFile = new BinaryReader(fs);

    wIdent = brFile.ReadUInt16();
    Debug.WriteLine(wIdent.ToString());
    Debug.WriteLine(String.Format("{0:x}", wIdent));  // cfd0  wrong value
    wFib = brFile.ReadUInt16();
    Debug.WriteLine(wFib.ToString());   //  57361  wrong value

    byte[] b = new byte[1024];

    while (brFile.Read(b, 0, b.Length) > 0)
    {
        Debug.WriteLine(utf8.GetString(b));
    }
}

上面显示了大部分文本,但也显示了许多其他内容。

我有通过 OpenXML 工作的 docx。需要的不仅仅是 iFilter,因为它需要半格式化。对文本运行算法以剔除不感兴趣的文档。也用于文档的快速文本,以便他们可以决定是否要下载文件并进行自动编码。

Office 互操作不是一种选择。这是针对服务器的,Microsoft 不建议在该环境中使用 Office 自动化。我们尝试过,但对于我们需要处理的文件量来说并不稳定。

4

3 回答 3

2

NPOI 对读取标准 Word 97-2000 DOC 文件的支持非常有限。

如果你确定了,你也可以尝试将用于导入 OpenOffice 使用的 Word 文件的代码从 Java 转换为 C#(如果你能合理地满足其开源许可证的要求)。Sharpen 工具可用于帮助转换代码。

如果您有时间在用户看到 Word 文件之前对其进行预处理,则可以使用 Office 自动化将 Word 文件转换为 HTML,然后在服务器环境中处理这些文件是轻而易举的事。

另一种选择是不要尝试发明自己的阅读器,而是投资于像 Aspose Words (http://www.aspose.com/) 这样的商业图书馆。最后,这很可能是最便宜和最可持续的选择。

于 2012-05-06T23:31:47.613 回答
1

对于这种情况,建议使用 Toxy。从 Toxy 1.4 开始,同时支持 doc 和 docx。您可以查看 toxy.codeplex.com 了解详细信息。1.4 中对格式的支持不是很好,但我们会在 1.6 中对其进行改进。

于 2015-03-02T18:29:04.817 回答
1

如果这仍然是实际的,我遇到了同样的问题。MS 二进制文件格式对 word (.doc)、excel (.xls)、power point (.ppt) 和所有旧版本都很常见。您应该首先按照操作来读取二进制文件的 FAT 部分,从中提取您可以读取的 WordDocument 流,正如您已经提到的那样。希望这可以帮助。

于 2014-04-09T05:56:36.670 回答