Partager via


Description du format de fichier binaire MS-DOC de Word

Résumé : Découvrez le format de fichier binaire MS-DOC qui est utilisé dans les produits Microsoft Word hérités, notamment les structures de base et les concepts clés d’interaction par programmation avec ce format.

Dernière modification : vendredi 6 janvier 2012

S’applique à : Office 2007 | Office 2010 | Open XML | Visual Studio Tools for Microsoft Office | Word | Word 2007 | Word 2010

Dans cet article
Vue d’ensemble du format de fichier MS-DOC
Conclusion
Ressources supplémentaires

Publication :  février 2011

Auteur :   Microsoft Corporation

Contenu

  • Vue d’ensemble du format de fichier MS-DOC

  • Composants essentiels du format de fichier MS-DOC

  • Extraction de texte des fichiers Word

  • Conclusion

  • Ressources supplémentaires

Cet article décrit les structures et certaines procédures pour travailler avec des fichiers MS-DOC. Il fait partie de la série d’articles qui introduisent les formats de fichier binaire utilisés par les produits Microsoft Office. Ces articles sont conçus pour être utilisés conjointement avec l’article Office File Format Documents disponible sur MSDN.

Vue d’ensemble du format de fichier MS-DOC

Microsoft Office Word 2003, Microsoft Word 2002, Microsoft Word 2000 et Microsoft Word 97 utilisent tous le format de fichier binaire MS-DOC comme format de fichier par défaut. Ce format de fichier s’applique à tout fichier ayant une extension .doc ou .dot. L’unité de données de base dans un document Word est le caractère, pouvant inclure un formatage et d’autres caractères non visibles, tels que ANSI et Unicode. Toutes les données caractères résident dans le flux de document Word. Ce flux commence par une structure nommée bloc FIB (File Information Block), qui contient des pointeurs vers toutes les données dans le fichier.

Notes

La procédure recommandée pour exécuter la plupart des tâches de programmation dans Microsoft Word consiste à utiliser les assemblys PIA (Primary Interop Assemblies) Word. Il s’agit d’un ensemble de classes .NET qui fournissent un modèle objet complet pour travailler avec Microsoft Word. Cette série d’articles concerne uniquement des scénarios avancés, par exemple où Microsoft Word n’est pas installé.

Composants essentiels du format de fichier MS-DOC

Voici certaines des structures les plus importantes que vous devez connaître lors de tout travail avec des fichiers .doc.

  • 2.1.1 WordDocument Stream

    Le flux de document Word est le principal flux dans un fichier .doc, et il contient toutes les données du fichier à l’exception des tables, qui sont stockées dans la 1Table stream or 0Table stream.

    • File Information Block

      Le bloc FIB commence au décalage 0x00 du flux de document Word. Il spécifie les emplacements de toutes les autres données dans le fichier. Les emplacements sont spécifiés par une paire de nombres entiers, dont le premier spécifie l’emplacement et le second la taille. Ces nombres entiers apparaissent dans des sous-structures du bloc FIB, comme l’emplacement FibRgFcLcb97. Les noms d’emplacements ont le préfixe fc. Les noms de tailles ont le préfixe lcb.

    • Structure Clx

      La structure Clx est un tableau de 0 ou plus structures Prc, qui contiennent des informations propriétaires, suivi d’une structure Pcdt, qui contient une structure PlcPcd.

  • Character

    Un caractère peut être un caractère texte ou un caractère non-texte, par exemple une marque de paragraphe ou un ancrage d’objet. Sa taille peut varier selon qu’il s’agisse d’un caractère ANSII, Unicode ou d’un caractère de contrôle. Les caractères adjacents dans le document ne sont pas nécessairement adjacents dans le fichier binaire.

    • Character Position (CP)

      Une position de caractère (CP) est un entier non signé, 32 bits qui fournit l’emplacement d’index d’un caractère dans le texte du document.

    • Structure Pcd

      Une structure Pcd spécifie la position du texte dans le flux de document Word, ainsi que certaines propriétés du texte.

  • Plc

    Une structure PLC est un tableau de CP, suivi d’un tableau d’éléments de données. Différentes structures Plc portent différents noms et mettent en œuvre différentes fonctions, par exemple la structure Plcbkf, qui est composée de signets et de pointeurs vers des signets.

  • Structure PlcPcd

    Une structure PlcPcd est une structure PLC qui mappe un tableau de CP dans des structures Pcd. En d’autres mots, elle mappe les positions de caractères dans le flux à des caractères dans le texte du document.

Extraction de texte des fichiers Word

L’algorithme formel pour l’extraction de texte est publié dans les documents de la spécification Open sur MSDN, sous 2.4.1 Retrieving Text, et un exemple d’une partie du processus est présenté dans la section Exemples, sous 3.1 Example of a Clx. Le présent document décrit une version simplifiée du processus.

Pour extraire du texte d’un document Word

  1. Lisez le fichier .doc dans un flux de données.

  2. Commencez à lire le bloc FIB (File Information Block), au décalage 0 du flux de document Word. Pour plus d’informations, voir 2.5.15 How to read the FIB

  3. À l’intérieur du FIB, localisez la structure FibRgFcLcb97. Cette structure commence à l’octet 154 du FIB. Elle consiste en une série de champs à 4 octets.

  4. Lisez le champ FibRgFcLcb97.fcClx à l’octet 268, et le champ FibRgFcLcb97.lcbClx à l’octet 272. Ces valeurs spécifient l’emplacement de décalage et la taille du Clx.

  5. Commencez la lecture de la structure Clx à partir du flux Table, à l’emplacement spécifié par le champ FibRgFcLcb97.fcClx.

  6. À l’intérieur de la structure Clx, localisez le Pcdt, qui suit immédiatement le tableau .RgPrc à longueur variable de structures Prc.

    Pour chaque membre du tableau :

    1. Lisez l’attribut .clxt, qui est l’octet 0 de la structure Prc. Si .clxt = 0x02, vous avez trouvé le Pcdt.

    2. Si .clxt = 0x01, lisez les 2 octets suivants comme un entier signé, puis avancez de ce nombre d’octets pour atteindre le membre suivant du tableau.

  7. À l’intérieur de la structure Pcdt, localisez la structure PlcPcd, qui commence à l’octet 5 du Pcdt.

  8. Chargez le tableau PlcPcd.aPcd et le tableau PlcPcd.aCp. Une valeur d’index établit une correspondance entre les membres de ces tableaux.

  9. Pour chaque structure Pcd dans PlcPcd.aPcd :

    1. Lisez la valeur du champ Pcd.Fc.fCompressed au bit 46 de la structure Pcd actuelle. Si cette valeur est 0, la structure Pcd se réfère à un caractère Unicode 16 bits. Si elle est 1, la structure se réfère à un caractère ANSI 8 bits.

    2. Lisez la valeur de Pcd.Fc, correspondant aux octets 2-5 du Pcd actuel, et la valeur CP correspondante.

      • S’il s’agit de caractères Unicode, le texte à la position du caractère spécifié par la valeur CP commence ) à un décalage égal à la valeur de Pcd.Fc dans le flux de document Word, et occupe 2 octets par caractère.

      • S’il s’agit de caractères ANSI, le texte au CP actuel commence à un décalage égal à la moitié de la valeur de Pcd.Fc, et occupe 1 octet par caractère.

      Dans les deux cas, le nombre de caractères spécifiés par le CP actuel est égal à la valeur du prochain CP dans le tableau moins celle du CP actuel.

Conclusion

Cet article ne présente qu’un exemple du format MS-DOC. Les outils fournis dans cet article vous permettent de procéder à une récupération de données simple. Avec une exploration plus poussée, vous pourriez commencer à récupérer des informations de formatage et d’autres métadonnées, et éventuellement procéder à des opérations d’enregistrement.

Ressources supplémentaires

Pour plus d’informations, voir les ressources suivantes :