Création, édition et analyse de fichiers DOCX
Aperçu
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 du workflow
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 basique"
-
Document de quelqu'un d'autre Utilisez le "Workflow de révision" (recommandé par défaut)
-
Documents juridiques, académiques, commerciaux ou gouvernementaux Utilisez le "Workflow de révision" (obligatoire)
Lecture et analyse du contenu
Extraction de texte
Si vous avez seulement besoin de lire le contenu textuel d'un document, vous devez convertir le document en markdown à l'aide de pandoc. Pandoc offre un excellent support pour préserver la structure du document et peut afficher les modifications suivies :
# Convertir un document en markdown avec modifications suivies
pandoc --track-changes=all chemin-vers-fichier.docx -o output.md
# Options : --track-changes=accept/reject/all
Accès XML brut
Vous avez besoin d'un accès XML brut pour : les commentaires, le formatage complexe, la structure du document, les médias intégrés et les métadonnées. Pour ces fonctionnalités, vous devrez décompresser un document et lire son contenu XML brut.
Décompression d'un fichier
python ooxml/scripts/unpack.py <fichier_office> <répertoire_sortie>
Structures clés des fichiers
word/document.xml- Contenu principal du documentword/comments.xml- Commentaires référencés dans document.xmlword/media/- Images et fichiers médias 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 L'INTÉGRALITÉ DU FICHIER : Lisez
docx-js.md(~500 lignes) complètement du début à la fin. NE JAMAIS définir de limites de plage lors de la lecture de ce fichier. Lisez le contenu complet du fichier pour obtenir la syntaxe détaillée, les règles de formatage 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 si ce n'est pas le cas, reportez-vous à la section des dépendances ci-dessous)
- Exportez en .docx en utilisant Packer.toBuffer()
Édition d'un document Word existant
Lors de l'édition d'un document Word existant, utilisez la Document library (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 des documents. Pour les scénarios complexes, vous pouvez accéder directement au DOM sous-jacent via la bibliothèque.
Workflow
- OBLIGATOIRE - LIRE L'INTÉGRALITÉ DU FICHIER : Lisez
ooxml.md(~600 lignes) complètement du début à la fin. NE JAMAIS définir de limites de plage lors de la lecture de ce fichier. Lisez le contenu complet du fichier pour connaître l'API de la Document library 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 Document library (voir la section "Document Library" dans ooxml.md)
- Reconditionnez le document final :
python ooxml/scripts/pack.py <répertoire_entrée> <fichier_office>
La Document library 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 révision pour la relecture de documents
Ce workflow vous permet de planifier des modifications suivies complètes en utilisant le markdown avant de les implémenter en OOXML. CRITIQUE : Pour des modifications suivies complètes, vous devez implémenter TOUS les changements de manière systématique.
Stratégie de regroupement en lots : Regroupez les modifications connexes en lots de 3 à 10 changements. 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. Répéter du texte inchangé rend les révisions plus difficiles à examiner et semble peu professionnel. Divisez les remplacements en : [texte inchangé] + [suppression] + [insertion] + [texte inchangé]. Préservez le RSID de l'élément d'origine pour le texte inchangé en extrayant l'élément <w:r> de l'original et en le réutilisant.
Exemple - Changer "30 jours" en "60 jours" dans une phrase :
# MAUVAIS - Remplace toute la phrase
'<w:del><w:r><w:delText>La durée est de 30 jours.</w:delText></w:r></w:del><w:ins><w:r><w:t>La durée est de 60 jours.</w:t></w:r></w:ins>'
# BON - Ne marque que ce qui a changé, préserve le <w:r> original pour le texte inchangé
'<w:r w:rsidR="00AB12CD"><w:t>La durée 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 current.md -
Identifier et regrouper les modifications : Examinez 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 section/titre (ex. "Section 3.2", "Article IV")
- Identifiants de paragraphe si numérotés
- Motifs grep avec texte environnant unique
- Structure du document (ex. "premier paragraphe", "bloc de signature")
- NE PAS utiliser les numéros de ligne du markdown - ils ne correspondent pas à la structure XML
Organisation en lots (regroupez 3 à 10 modifications connexes par lot) :
- Par section : "Lot 1 : Amendements à la Section 2", "Lot 2 : Mises à jour à la Section 5"
- Par type : "Lot 1 : Corrections de dates", "Lot 2 : Changements de noms de parties"
- Par complexité : Commencez par des remplacements de texte simples, puis traitez les changements structurels complexes
- Séquentiel : "Lot 1 : Pages 1-3", "Lot 2 : Pages 4-6"
-
Lire la documentation et décompresser :
- OBLIGATOIRE - LIRE L'INTÉGRALITÉ DU FICHIER : Lisez
ooxml.md(~600 lignes) complètement du début à la fin. NE JAMAIS définir de limites de plage lors de la lecture de ce fichier. Portez une attention particulière aux sections "Document Library" et "Tracked Change Patterns". - Décompressez le document :
python ooxml/scripts/unpack.py <file.docx> <dir> - 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 L'INTÉGRALITÉ DU FICHIER : 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é (taille de lot de 3 à 10 modifications fonctionne bien)
Regroupements de lots suggérés :
- Par section du document (ex. "Modifications de la Section 3", "Définitions", "Clause de résiliation")
- Par type de modification (ex. "Modifications de dates", "Mises à jour de noms de parties", "Remplacements de termes juridiques")
- Par proximité (ex. "Modifications sur les pages 1-3", "Modifications dans la première moitié du document")
Pour chaque lot de modifications connexes :
a. Faire correspondre le texte au XML : Utilisez grep sur
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 "Document Library" dans ooxml.md pour les motifs.Remarque : Effectuez toujours un grep de
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 : Après avoir terminé tous les lots, convertissez le répertoire décompressé en .docx :
python ooxml/scripts/pack.py unpacked reviewed-document.docx -
Vérification finale : Effectuez une vérification complète du document entier :
- Convertissez le document final en markdown :
pandoc --track-changes=all reviewed-document.docx -o verification.md - Vérifiez que TOUTES les modifications ont été appliquées correctement :
grep "phrase originale" verification.md # Ne devrait PAS la trouver grep "phrase de remplacement" verification.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 utilisant un processus 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 (ex.-f 2commence à la page 2)-l N: Dernière page à convertir (ex.-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
Consignes 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 print 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 et la conversion PDF en images) - defusedxml :
pip install defusedxml(pour l'analyse XML sécurisée)