Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.106 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Text aus Word.DOC extrahieren (MS-Word 97-2003-Binär-Format:)

  Alt 4. Jan 2014, 22:34
Moin Ralf,

da ich auch gerne solche Dinge versuche, habe ich mich mal ein wenig damit beschäftigt.
Ich habe mir jetzt mal ein paar Word-Dokumente in einem Hex-Editor eingelesen.
Alle müssten im Format 97-2003 gewesen sein (einmal Last Modified 1998, einmal 2003 und eine Testdatei habe ich in dem Format mit Word 2013 abgespeichert).
Bei allen beginnt FibBase am Offset 512.
Wichtig hierbei:
Die Daten werden im Intel-Format (Littel-Endian) gespeichert, dass heisst:
Die Kennung wIdent $A5EC steht dort in der Reihenfolge $ECA5.

Hier mal ein Beispiel:

Delphi-Quellcode:
type
  TcsFibBase = packed record
    wIdent : WORD; // $A5EC
    nFib : WORD; // $00C1
    wUnused1 : WORD;
    wLID : WORD;
    pnNext : WORD;
    wBitField1 : WORD; // Eventuell zwei einzelne Byte und kein Word
    nFibBack : WORD; // $00BF oder $00C1
    lKey : DWORD;
    envr : Byte;
    bBitField2 : Byte;
    wReserved3 : WORD;
    wReserved4 : WORD;
    dwReserved5 : DWORD;
    dwReserved6 : DWORD;
  end;

var
  fs : TFileStream;
  LFibBase : TcsFibBase;

begin
  fs := TFileStream.Create('i:\temp\Testdokument.doc',fmOpenRead);
  try
    fs.Position := 512;
    fs.Read(LFibBase,SizeOf(LFibBase));
    if LFibBase.wIdent = $A5EC then ShowMessage('wIdent ist OK');
    if LFibBase.nFib = $00C1 then ShowMessage('nFib ist OK');
    if (LFibBase.nFibBack = $00BF) or (LFibBase.nFibBack = $00C1) then ShowMessage('nFibBack ist OK');
  finally
    fs.Free;
  end;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat