2012-05-06 159 views
1

Microsoft已发布Office文件的二进制规范。我需要从.Doc中提取文本。这个页面似乎意味着从Doc中提取文本并不困难,但我没有遵循。从Word Doc Binary中提取文本

MS Doc Extract

这是我到目前为止所。
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 Interop不是一个选项。这是针对服务器的,Microsoft不建议在该环境中使用Office自动化。我们尝试过,并且对于我们需要处理的文档数量不稳定。

回答

2

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

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

如果您有时间在用户看到它们之前预先处理Word文件,则可以使用Office自动化将Word文件转换为HTML,然后在服务器环境中处理这些文件。

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

+0

谢谢,转换文件不是一个选项,因为文件无法更改。我会看看你提出的其他选项。该msdn页面看起来很容易,但我再次甚至无法读取第一个偏移量。 – Paparazzi

+0

在Apose网站上,他们列出了ASP.NET和Win Forms,但不包括WPF。他们不支持WPF吗?似乎很奇怪,因为文件转换不是UI。 – Paparazzi

+0

我不认为它与UI有任何关系。我在没有任何UI的类库中使用了Apose。 – Jeremy

1

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

+0

为了帮助理清,word文档的开头将是由user3041596提供的上面定义的化合物标题链接。上面显示的值0xcfd0是化合物标题签名的一部分。一旦你解析了这个头文件,你就可以找到WordDataStream开始的位置;这是FIB开始的地方,你可以在那里找到文本。 – Carlos

1

对于这种情况,建议使用Toxy。自Toxy 1.4以来,doc和docx都受支持。详情请参阅toxy.codeplex.com。格式化在1.4中不太受支持,但我们将在1.6中进行改进。