从Word Doc二进制文件中提取文本

本文关键字:提取 取文本 二进制文件 Word Doc | 更新日期: 2023-09-27 18:33:31

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

微软文档提取物

这就是我目前所拥有的。
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));
    }
}

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

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

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

从Word Doc二进制文件中提取文本

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

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

如果您有时间在用户看到 Word 文件之前对其进行预处理,则可以使用 Office 自动化将 Word 文件转换为 HTML,这在服务器环境中是小菜一碟。

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

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

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