Grundlegendes zum MS-DOC-Binärdateiformat von Word

Zusammenfassung: Informationen zu dem in Vorversionen von Microsoft Word verwendeten Binärdateiformat MS-DOC sowie zu den Grundstrukturen und Hauptkonzepten für die programmgesteuerte Interaktion mit diesem Format.

Letzte Änderung: Freitag, 6. Januar 2012

Gilt für: Office 2007 | Office 2010 | Open XML | Visual Studio Tools for Microsoft Office | Word | Word 2007 | Word 2010

Inhalt dieses Artikels
Übersicht über das Dateiformat MS-DOC
Schlussbemerkung
Weitere Ressourcen

Veröffentlicht:  Februar 2011

Beitrag von:   Microsoft Corporation

Inhalt

  • Übersicht über das Dateiformat MS-DOC

  • Hauptkomponenten des Dateiformats MS-DOC

  • Extrahieren von Text aus Word-Dateien

  • Schlussbemerkung

  • Weitere Ressourcen

In diesem Artikel werden die Strukturen und verschiedene Vorgehensweisen zum Arbeiten mit MS-DOC-Dateien beschrieben. Der Artikel gehört zu einer Reihe, in der die von Microsoft Office-Produkten verwendeten Binärdateiformate vorgestellt werden. Diese Artikel sind für die gemeinsame Nutzung mit den Office File Format Documents auf MSDN vorgesehen.

Übersicht über das Dateiformat MS-DOC

In Microsoft Office Word 2003, Microsoft Word 2002, Microsoft Word 2000 und Microsoft Word 97 ist das Binärdateiformat MS-DOC das Standarddateiformat. Dieses Dateiformat gilt für alle Dateien mit den Erweiterungen DOC und DOT. Die Basisdateneinheit in einem Word-Dokument ist ein Zeichen, wozu Formatierungs- und andere nicht sichtbare Zeichen sowie ANSI- und Unicode-Zeichen zählen. Sämtliche Zeichendaten befinden sich im Word Document-Datenstrom. Am Anfang dieses Datenstroms befindet sich eine File Information Block (FIB) genannte Struktur, die Verweise auf alle Daten in der Datei enthält.

Hinweis

Die empfohlene Vorgehensweise zum programmgesteuerten Ausführen von Aufgaben in Microsoft Word ist das Verwenden der primären Interopassemblys für Word. Dabei handelt es sich um eine Gruppe von .NET-Klassen, die ein vollständiges Objektmodell für das Arbeiten mit Microsoft Word bereitstellen. In dieser Artikelreihe werden nur komplexere Szenarien behandelt, z. B. das Fehlen einer Installation von Microsoft Word.

Hauptkomponenten des Dateiformats MS-DOC

Es folgen nun einige der wichtigsten Strukturen, mit denen Sie beim Arbeiten mit DOC-Dateien vertraut sein müssen.

  • 2.1.1 WordDocument Stream

    Der Word Document-Datenstrom ist der Hauptdatenstrom in einer DOC-Datei und enthält alle Daten in der Datei außer für Tabellen, die im 1Table stream or 0Table stream gespeichert sind.

    • File Information Block

      Der File Information Block beginnt bei Offset 0x00 des Word Document-Datenstroms und gibt die Positionen aller anderen Daten in der Datei an. Die Positionen werden als Paare ganzer Zahlen angegeben, wobei das erste die Position und das zweite die Größe darstellt. Diese ganzen Zahlen werden in Unterstrukturen des File Information Block angezeigt, z. B. FibRgFcLcb97. Das Präfix von Positionsnamen lautet fc, das von Größenangaben lcb.

    • Die Clx-Struktur

      Die Clx-Struktur ist ein Array von 0 oder mehreren Prc-Strukturen, die Eigenschafteninformation enthalten, gefolgt von einer Pcdt-Struktur, die eine PlcPcd-Struktur enthält.

  • Character

    Ein Zeichen kann ein Textzeichen oder Nicht-Textzeichen wie eine Absatzmarke oder ein Objektanker sein. Seine Größe ist abhängig davon, ob es sich um ein ANSI-, Unicode- oder Steuerzeichen handelt. Benachbarte Zeichen im Dokument liegen in der Binärdatei nicht unbedingt nebeneinander.

    • Character Position (CP)

      Eine Character Position (CP, dt. Zeichenposition) ist eine 32 Bit große ganze Zahl ohne Vorzeichen, die die Indexposition eines Zeichens im Dokumenttext angibt.

    • Die Pcd-Struktur

      Eine Pcd-Struktur gibt die Position von Text im Word Document-Datenstrom sowie einige Eigenschaften des Texts an.

  • Plc

    Eine PLC-Struktur ist ein Array von CP-Strukturen, gefolgt von einem Array von Datenelementen. PLC -Strukturen können verschiedene Namen und Strukturen haben, wie beispielsweise die PLCBKF-Struktur, die aus Textmarken und Zeigern auf Textmarken besteht.

  • Die PlcPcd-Struktur

    Eine PlcPcd-Struktur ist eine PLC-Struktur, die ein Array aus CP-Strukturen zu Pcd-Strukturen zuordnet. Sie dient zum Zuordnen der Positionen von Zeichen im Datenstrom zu Zeichen im Dokumenttext.

Extrahieren von Text aus Word-Dateien

Der formale Algorithmus zum Abrufen von Text wird in den Open Specification-Dokumenten auf der MSDN-Website unter 2.4.1 Retrieving Text beschrieben. Und unter 3.1 Example of a Clx finden Sie im Abschnitt "Beispiele" ein Beispiel eines Teils des Prozesses, der hier in einer vereinfachten Version vorgestellt wird.

So extrahieren Sie Text aus einem Word-Dokument

  1. Lesen Sie die DOC-Datei in einen Datenstrom ein.

  2. Beginnen Sie mit dem Lesen des File Information Block (FIB) bei Offset 0 des Word Document-Datenstroms. Weitere Informationen finden Sie unter 2.5.15 How to read the FIB

  3. Suchen Sie im File Information Block die FibRgFcLcb97-Struktur, die bei Byte 154 des FIB beginnt und aus einer Reihe von 4 Byte großen Feldern besteht.

  4. Lesen Sie das Feld FibRgFcLcb97.fcClx bei Byte 268 und das Feld FibRgFcLcb97.lcbClx bei Byte 272, die die Offsetposition und Größe der Clx-Struktur angeben.

  5. Beginnen Sie mit dem Lesen der Clx-Struktur aus dem Table-Datenstrom beim Offset, der vom Feld FibRgFcLcb97.fcClx angegeben wird.

  6. Bestimmen Sie in der Clx-Struktur die Pcdt-Struktur, die unmittelbar auf das .RgPrc-Array mit Prc-Strukturen variabler Länge folgt.

    Führen Sie für jedes Element des Arrays die folgenden Schritte aus:

    1. Lesen Sie das .clxt-Attribut (Byte 0 der Prc-Struktur. Falls .clxt = 0x02, haben Sie die Pcdt-Struktur gefunden.

    2. Falls .clxt = 0x01, lesen Sie die nächsten beiden Bytes als ganze Zahlen mit Vorzeichen, und springen Sie anschließend um diese Anzahl von Bytes nach vorn zum nächsten Element des Arrays.

  7. Suchen Sie in der Pcdt-Struktur die PlcPcd-Struktur, die bei Byte 5 der Pcdt-Struktur beginnt.

  8. Laden Sie das PlcPcd.aPcd-Array und das PlcPcd.aCp-Array. Die Elemente dieser Arrays entsprechen einander gemäß dem Indexwert.

  9. Gehen Sie für jede Pcd-Struktur in einer PlcPcd.aPcd-Struktur so vor:

    1. Lesen Sie den Wert des Felds Pcd.Fc.fCompressed bei Bit 46 der aktuellen Pcd-Struktur. Falls 0, verweist die Pcd-Struktur auf ein 16-Bit-Unicode-Zeichen. Falls 1, verweist sie auf ein 8-Bit-ANSI-Zeichen.

    2. Lesen Sie den Wert der Pcd.Fc-Struktur (Bytes 2-5 der aktuellen Pcd-Struktur) und den entsprechenden CP-Wert.

      • Bei Unicode beginnt der Text an der Zeichenposition, der vom aktuellen CP-Wert angegeben wird, bei einem Offset, der dem Wert von Pcd.Fc im Word Document-Datenstrom entspricht, und belegt pro Zeichen zwei Bytes.

      • Bei ANSI beginnt der Text an der Zeichenposition des aktuellen CP-Werts bei einem Offset, der der Hälfte des Werts von Pcd.Fc entspricht, und belegt pro Zeichen ein Byte.

      In beiden Fällen entspricht die Anzahl der vom aktuellen CP-Wert angegebenen Anzahl von Zeichen dem Wert des nächsten CP-Werts im Array minus der Anzahl des aktuellen CP-Werts.

Schlussbemerkung

In diesem Artikel wird das MS-DOC-Format nur beispielhaft behandelt. Mithilfe der in diesem Artikel vorgestellten Instrumente sollte eine einfache Datenwiederherstellung möglich sein. Nach weiterer eingehender Beschäftigung können Sie beginnen, Formatierungsinformationen und andere Metadaten wiederherzustellen, und sich letztlich mit Speichervorgängen auseinandersetzen.

Weitere Ressourcen

Weitere Informationen finden Sie in den folgenden Ressourcen: