2012-05-06 4 views
1

MicrosoftはOfficeファイルのバイナリ仕様を公開しました。 .Docからテキストを抽出する必要があります。このページはDocからテキストを抽出するのが難しくないが、私はそれに従わないことを暗示しているようだ。Wordからテキストを抽出するDocバイナリ

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)); 
    } 
} 

上記のほとんどのテキストが表示されますが、他にも多くのものがあります。

私はdocxをOpenXML経由で使用しています。セミフォーマットが必要なiFilter以上のものが必要です。関心のない文書を抽出するために、テキストに対してアルゴリズムを実行します。ドキュメントのクイックテキストにも使用されるため、ファイルをダウンロードするかどうかや自動コーディングを決定できます。

Office Interopはオプションではありません。これはサーバー用であり、Microsoftはその環境でOfficeオートメーションを推奨しません。私たちは試みましたが、処理する必要のある文書の量が安定していません。

答えて

2

NPOIには、標準のWord 97-2000 DOCファイルを読むための非常に限られたサポートがあります。

もしあなたが決定されていれば、OpenOfficeで使用されているWordファイルをJavaからC#にインポートするコードを変換することもできます(オープンソースライセンスの要件を満たすことができます)。 Sharpenツールを使用してコードを変換することができます。

ユーザーが表示する前にWordファイルを事前処理する時間がある場合は、Officeオートメーションを使用してWordファイルをHTMLに変換することができます.HTMLファイルはHTML形式に変換され、サーバー環境で処理されます。

もう1つのオプションはではなく、あなた自身の読者を発明しようとする代わりに、Aspose Words(http://www.aspose.com/)のような商業ライブラリに投資してみてください。結局、これは最も安く持続可能な選択肢かもしれません。

+0

ファイルを変換することはできませんので、ファイルを変換するオプションはありません。あなたが提示した他のオプションについても見ていきます。そのmsdnページでは簡単に見えましたが、もう一度最初のオフセットで読むことさえできませんでした。 – Paparazzi

+0

Aposeサイトでは、WPFではなくASP.NETとWinフォームが表示されます。彼らはWPFをサポートしていませんか?ファイル変換はUIではないので不思議そうです。 – Paparazzi

+0

私はそれがUIと関係がないとは思わない。私はAposeをUIなしでクラスライブラリに使用しました。 – Jeremy

1

これがまだ実際の場合は、同じ問題が発生しました。 MSバイナリファイル形式は、ワード(.doc)、エクセル(.xls)、パワーポイント(.ppt)、およびすべての古いバージョンに共通です。最初にthisに従ってバイナリのFATセクションを読む必要があります。このセクションからWordDocumentストリームを抽出します。このストリームから、既に説明したように読み込むことができます。 これが役立つことを願っています。

+0

明確にするために、単語文書の先頭は、user3041596によって提供された上記の定義済みの複合ヘッダーになります。上記の値0xcfd0は、複合ヘッダー署名の一部です。このヘッダーを解析すると、WordDataStreamの開始位置を見つけることができます。 FIBが始まる場所であり、そこでテキストを見つけることができます。 – Carlos

1

この場合、Toxyが使用されることが推奨されます。 Toxy 1.4以降、docとdocxの両方がサポートされています。詳細はtoxy.codeplex.comで確認できます。書式設定は1.4ではうまくサポートされていませんが、1.6では改善されます。

関連する問題