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));
}
}
上面显示了大部分文字,但也有很多其他内容。
我有通过OpenXML工作的docx。需要的不仅仅是iFilter,因为它需要半格式化。在文本上运行算法以剔除不感兴趣的文档。还用于文档的快速文本,以便他们决定是否要下载文件和自动编码。
Office Interop不是一个选项。这适用于服务器,Microsoft不建议在该环境中使用Office自动化。我们尝试过,它对于我们需要处理的文档量并不稳定。
答案 0 :(得分:2)
NPOI对阅读标准Word 97-2000 DOC文件的支持非常有限。
如果您确定了,您还可以尝试将用于将OpenOffice使用的Word文件从Java导入C#的代码转换为(如果您可以合理地满足其开源许可证的要求)。 Sharpen工具可用于帮助转换代码。
如果您有足够的时间在用户看到之前预处理Word文件,您可以使用Office自动化将Word文件转换为HTML,这样就可以在服务器环境中处理。
另一种选择是不尝试发明自己的读者,而是投资商业图书馆,如Aspose Words(http://www.aspose.com/)。最后,这可能是最便宜和最可持续的选择。
答案 1 :(得分:1)
如果这仍然是实际的,我遇到了同样的问题。 MS二进制文件格式对于单词(.doc),excel(.xls),power point(.ppt)和所有旧版本都是通用的。您应该首先按照this来读取二进制文件的FAT部分,然后从中提取您可以读取的WordDocument流,如您所述。 希望这会有所帮助。
答案 2 :(得分:1)
对于这种情况,建议使用Toxy。从Toxy 1.4开始,doc和docx都受支持。您可以访问toxy.codeplex.com了解详细信息。 1.4中不支持格式化,但我们将在1.6中对其进行改进。