Création, édition et analyse de documents DOCX
Présentation
Un utilisateur peut vous demander de créer, éditer ou analyser le contenu d'un fichier .docx. Un fichier .docx est essentiellement une archive ZIP contenant des fichiers XML et d'autres ressources que vous pouvez lire ou modifier. Vous disposez de différents outils et workflows pour différentes tâches.
Arbre de décision des workflows
Lecture/Analyse du contenu
Utilisez les sections "Extraction de texte" ou "Accès XML brut" ci-dessous
Création d'un nouveau document
Utilisez le workflow "Création d'un nouveau document Word"
Édition d'un document existant
-
Votre propre document + modifications simples Utilisez le workflow "Édition OOXML de base"
-
Document d'une autre personne Utilisez le "Workflow de suivi des modifications (redlining)" (recommandé par défaut)
-
Documents juridiques, académiques, commerciaux ou gouvernementaux Utilisez le "Workflow de suivi des modifications (redlining)" (obligatoire)
Lecture et analyse du contenu
Extraction de texte
Si vous avez simplement besoin de lire le contenu textuel d'un document, vous devez le convertir en Markdown en utilisant Pandoc. Pandoc offre un excellent support pour la préservation de la structure du document et peut afficher les modifications suivies :
# Convertir le document en Markdown avec les modifications suivies
pandoc --track-changes=all chemin-vers-fichier.docx -o sortie.md
# Options : --track-changes=accept/reject/all
Accès XML brut
Vous avez besoin d'un accès XML brut pour : les commentaires, la mise en forme complexe, la structure du document, les médias intégrés et les métadonnées. Pour toutes ces fonctionnalités, vous devrez décompresser un document et lire son contenu XML brut.
Décompresser un fichier
python ooxml/scripts/unpack.py <fichier_office> <répertoire_sortie>
Structures de fichiers clés
word/document.xml- Contenu principal du documentword/comments.xml- Commentaires référencés dans document.xmlword/media/- Images et fichiers multimédia intégrés- Les modifications suivies utilisent les balises
<w:ins>(insertions) et<w:del>(suppressions)
Création d'un nouveau document Word
Lors de la création d'un nouveau document Word à partir de zéro, utilisez docx-js, qui vous permet de créer des documents Word en JavaScript/TypeScript.
Workflow
- OBLIGATOIRE - LIRE LE FICHIER EN ENTIER : Lisez
docx-js.md(~500 lignes) complètement du début à la fin. NE définissez JAMAIS de limites de plage lors de la lecture de ce fichier. Lisez le contenu complet du fichier pour la syntaxe détaillée, les règles de mise en forme critiques et les meilleures pratiques avant de procéder à la création du document. - Créez un fichier JavaScript/TypeScript en utilisant les composants Document, Paragraph, TextRun (Vous pouvez supposer que toutes les dépendances sont installées, mais sinon, reportez-vous à la section des dépendances ci-dessous)
- Exportez au format .docx en utilisant
Packer.toBuffer()
Édition d'un document Word existant
Lors de l'édition d'un document Word existant, utilisez la bibliothèque Document (une bibliothèque Python pour la manipulation OOXML). La bibliothèque gère automatiquement la configuration de l'infrastructure et fournit des méthodes pour la manipulation de documents. Pour les scénarios complexes, vous pouvez accéder au DOM sous-jacent directement via la bibliothèque.
Workflow
- OBLIGATOIRE - LIRE LE FICHIER EN ENTIER : Lisez
ooxml.md(~600 lignes) complètement du début à la fin. NE définissez JAMAIS de limites de plage lors de la lecture de ce fichier. Lisez le contenu complet du fichier pour l'API de la bibliothèque Document et les motifs XML pour éditer directement les fichiers du document. - Décompressez le document :
python ooxml/scripts/unpack.py <fichier_office> <répertoire_sortie> - Créez et exécutez un script Python en utilisant la bibliothèque Document (voir la section "Bibliothèque Document" dans ooxml.md)
- Reconditionnez le document final :
python ooxml/scripts/pack.py <répertoire_entrée> <fichier_office>
La bibliothèque Document fournit à la fois des méthodes de haut niveau pour les opérations courantes et un accès direct au DOM pour les scénarios complexes.
Workflow de suivi des modifications pour la révision de documents
Ce workflow vous permet de planifier des modifications suivies complètes en utilisant Markdown avant de les implémenter en OOXML. CRITIQUE : Pour des modifications suivies complètes, vous devez implémenter TOUTES les modifications de manière systématique.
Stratégie de regroupement par lots : Regroupez les modifications connexes en lots de 3 à 10 modifications. Cela rend le débogage gérable tout en maintenant l'efficacité. Testez chaque lot avant de passer au suivant.
Principe : Modifications minimales et précises
Lors de l'implémentation de modifications suivies, ne marquez que le texte qui change réellement. La répétition de texte inchangé rend les modifications plus difficiles à réviser et semble peu professionnelle. Décomposez les remplacements en : [texte inchangé] + [suppression] + [insertion] + [texte inchangé]. Préservez le RSID de l'exécution d'origine pour le texte inchangé en extrayant l'élément <w:r> de l'original et en le réutilisant.
Exemple - Modification de "30 jours" en "60 jours" dans une phrase :
# MAUVAIS - Remplace la phrase entière
'<w:del><w:r><w:delText>Le terme est de 30 jours.</w:delText></w:r></w:del><w:ins><w:r><w:t>Le terme est de 60 jours.</w:t></w:r></w:ins>'
# BON - Marque uniquement ce qui a changé, préserve le <w:r> d'origine pour le texte inchangé
'<w:r w:rsidR="00AB12CD"><w:t>Le terme est de </w:t></w:r><w:del><w:r><w:delText>30</w:delText></w:r></w:del><w:ins><w:r><w:t>60</w:t></w:r></w:ins><w:r w:rsidR="00AB12CD"><w:t> jours.</w:t></w:r>'
Workflow de modifications suivies
-
Obtenir une représentation Markdown : Convertissez le document en Markdown avec les modifications suivies préservées :
pandoc --track-changes=all chemin-vers-fichier.docx -o actuel.md -
Identifier et regrouper les modifications : Passez en revue le document et identifiez TOUTES les modifications nécessaires, en les organisant en lots logiques :
Méthodes de localisation (pour trouver les modifications dans le XML) :
- Numéros de sections/en-têtes (par exemple, "Section 3.2", "Article IV")
- Identifiants de paragraphes s'ils sont numérotés
- Motifs grep avec un texte environnant unique
- Structure du document (par exemple, "premier paragraphe", "bloc de signature")
- N'utilisez PAS les numéros de ligne Markdown - ils ne correspondent pas à la structure XML
Organisation des lots (regroupez 3 à 10 modifications connexes par lot) :
- Par section : "Lot 1 : Modifications de la section 2", "Lot 2 : Mises à jour de la section 5"
- Par type : "Lot 1 : Corrections de dates", "Lot 2 : Modifications de noms de parties"
- Par complexité : Commencez par des remplacements de texte simples, puis abordez les modifications structurelles complexes
- Séquentiel : "Lot 1 : Pages 1-3", "Lot 2 : Pages 4-6"
-
Lire la documentation et décompresser :
- OBLIGATOIRE - LIRE LE FICHIER EN ENTIER : Lisez
ooxml.md(~600 lignes) complètement du début à la fin. NE définissez JAMAIS de limites de plage lors de la lecture de ce fichier. Portez une attention particulière aux sections "Bibliothèque Document" et "Motifs de modifications suivies". - Décompressez le document :
python ooxml/scripts/unpack.py <fichier.docx> <répertoire> - Notez le RSID suggéré : Le script de décompression suggérera un RSID à utiliser pour vos modifications suivies. Copiez ce RSID pour l'utiliser à l'étape 4b.
- OBLIGATOIRE - LIRE LE FICHIER EN ENTIER : Lisez
-
Implémenter les modifications par lots : Regroupez les modifications logiquement (par section, par type ou par proximité) et implémentez-les ensemble dans un seul script. Cette approche :
- Facilite le débogage (lot plus petit = plus facile d'isoler les erreurs)
- Permet une progression incrémentale
- Maintient l'efficacité (une taille de lot de 3 à 10 modifications fonctionne bien)
Regroupements suggérés pour les lots :
- Par section du document (par exemple, "Modifications de la section 3", "Définitions", "Clause de résiliation")
- Par type de modification (par exemple, "Modifications de dates", "Mises à jour de noms de parties", "Remplacements de termes juridiques")
- Par proximité (par exemple, "Modifications sur les pages 1-3", "Modifications dans la première moitié du document")
Pour chaque lot de modifications connexes :
a. Mapper le texte en XML : Utilisez grep dans
word/document.xmlpour vérifier comment le texte est réparti entre les éléments<w:r>.b. Créer et exécuter le script : Utilisez
get_nodepour trouver les nœuds, implémentez les modifications, puisdoc.save(). Voir la section "Bibliothèque Document" dans ooxml.md pour les motifs.Remarque : Utilisez toujours grep sur
word/document.xmlimmédiatement avant d'écrire un script pour obtenir les numéros de ligne actuels et vérifier le contenu textuel. Les numéros de ligne changent après chaque exécution de script. -
Reconditionner le document : Une fois tous les lots terminés, convertissez le répertoire décompressé en .docx :
python ooxml/scripts/pack.py décompressé document_révisé.docx -
Vérification finale : Effectuez une vérification complète du document entier :
- Convertissez le document final en Markdown :
pandoc --track-changes=all document_révisé.docx -o vérification.md - Vérifiez que TOUTES les modifications ont été appliquées correctement :
grep "phrase originale" vérification.md # NE devrait PAS la trouver grep "phrase de remplacement" vérification.md # Devrait la trouver - Vérifiez qu'aucune modification non intentionnelle n'a été introduite
- Convertissez le document final en Markdown :
Conversion de documents en images
Pour analyser visuellement les documents Word, convertissez-les en images en deux étapes :
-
Convertir DOCX en PDF :
soffice --headless --convert-to pdf document.docx -
Convertir les pages PDF en images JPEG :
pdftoppm -jpeg -r 150 document.pdf pageCela crée des fichiers comme
page-1.jpg,page-2.jpg, etc.
Options :
-r 150: Définit la résolution à 150 DPI (ajustez pour l'équilibre qualité/taille)-jpeg: Format de sortie JPEG (utilisez-pngpour PNG si préféré)-f N: Première page à convertir (par exemple,-f 2commence à la page 2)-l N: Dernière page à convertir (par exemple,-l 5s'arrête à la page 5)page: Préfixe pour les fichiers de sortie
Exemple pour une plage spécifique :
pdftoppm -jpeg -r 150 -f 2 -l 5 document.pdf page # Convertit uniquement les pages 2 à 5
Directives de style de code
IMPORTANT : Lors de la génération de code pour les opérations DOCX :
- Écrivez un code concis
- Évitez les noms de variables verbeux et les opérations redondantes
- Évitez les instructions d'affichage inutiles
Dépendances
Dépendances requises (installez si non disponibles) :
- pandoc :
sudo apt-get install pandoc(pour l'extraction de texte) - docx :
npm install -g docx(pour la création de nouveaux documents) - LibreOffice :
sudo apt-get install libreoffice(pour la conversion PDF) - Poppler :
sudo apt-get install poppler-utils(pour pdftoppm qui convertit le PDF en images) - defusedxml :
pip install defusedxml(pour l'analyse XML sécurisée)