Creación, edición y análisis de DOCX
Resumen
Un usuario puede pedirte que crees, edites o analices el contenido de un archivo .docx. Un archivo .docx es esencialmente un archivo ZIP que contiene archivos XML y otros recursos que puedes leer o editar. Tienes diferentes herramientas y flujos de trabajo disponibles para distintas tareas.
Árbol de decisión del flujo de trabajo
Lectura/Análisis de contenido
Usa las secciones "Extracción de texto" o "Acceso a XML sin procesar" a continuación
Creación de un nuevo documento
Usa el flujo de trabajo "Creación de un nuevo documento de Word"
Edición de un documento existente
-
Tu propio documento + cambios simples Usa el flujo de trabajo "Edición básica OOXML"
-
Documento de otra persona Usa el "Flujo de trabajo de revisión con cambios controlados" (recomendado por defecto)
-
Documentos legales, académicos, de negocios o gubernamentales Usa el "Flujo de trabajo de revisión con cambios controlados" (obligatorio)
Lectura y análisis de contenido
Extracción de texto
Si solo necesitas leer el contenido textual de un documento, debes convertirlo a markdown usando pandoc. Pandoc proporciona un excelente soporte para preservar la estructura del documento y puede mostrar cambios controlados:
# Convertir documento a markdown con cambios controlados
pandoc --track-changes=all ruta-al-archivo.docx -o salida.md
# Opciones: --track-changes=accept/reject/all
Acceso a XML sin procesar
Necesitas acceso al XML sin procesar para: comentarios, formato complejo, estructura del documento, medios incrustados y metadatos. Para cualquiera de estas características, necesitarás desempaquetar un documento y leer su contenido XML sin procesar.
Desempaquetar un archivo
python ooxml/scripts/unpack.py <archivo_oficina> <directorio_salida>
Estructuras de archivo clave
word/document.xml- Contenido principal del documentoword/comments.xml- Comentarios referenciados en document.xmlword/media/- Imágenes y archivos multimedia incrustados- Los cambios controlados usan etiquetas
<w:ins>(inserciones) y<w:del>(eliminaciones)
Creación de un nuevo documento de Word
Al crear un nuevo documento de Word desde cero, usa docx-js, que te permite crear documentos de Word usando JavaScript/TypeScript.
Flujo de trabajo
- OBLIGATORIO - LEER TODO EL ARCHIVO: Lee
docx-js.md(~500 líneas) completamente de principio a fin. NUNCA establezcas límites de rango al leer este archivo. Lee el contenido completo del archivo para obtener detalles de sintaxis, reglas de formato críticas y mejores prácticas antes de proceder con la creación del documento. - Crea un archivo JavaScript/TypeScript usando componentes Document, Paragraph, TextRun (Puedes asumir que todas las dependencias están instaladas, pero si no, consulta la sección de dependencias a continuación)
- Exporta como .docx usando Packer.toBuffer()
Edición de un documento de Word existente
Al editar un documento de Word existente, usa la biblioteca Document (una biblioteca Python para manipulación OOXML). La biblioteca maneja automáticamente la configuración de infraestructura y proporciona métodos para la manipulación de documentos. Para escenarios complejos, puedes acceder al DOM subyacente directamente a través de la biblioteca.
Flujo de trabajo
- OBLIGATORIO - LEER TODO EL ARCHIVO: Lee
ooxml.md(~600 líneas) completamente de principio a fin. NUNCA establezcas límites de rango al leer este archivo. Lee el contenido completo del archivo para obtener la API de la biblioteca Document y los patrones XML para editar directamente los archivos del documento. - Desempaqueta el documento:
python ooxml/scripts/unpack.py <archivo_oficina> <directorio_salida> - Crea y ejecuta un script Python usando la biblioteca Document (consulta la sección "Biblioteca Document" en ooxml.md)
- Empaqueta el documento final:
python ooxml/scripts/pack.py <directorio_entrada> <archivo_oficina>
La biblioteca Document proporciona tanto métodos de alto nivel para operaciones comunes como acceso directo al DOM para escenarios complejos.
Flujo de trabajo de revisión con cambios controlados
Este flujo de trabajo te permite planificar cambios controlados completos usando markdown antes de implementarlos en OOXML. CRÍTICO: Para cambios controlados completos, debes implementar TODOS los cambios de forma sistemática.
Estrategia de agrupación: Agrupa los cambios relacionados en lotes de 3 a 10 cambios. Esto hace que la depuración sea manejable mientras se mantiene la eficiencia. Prueba cada lote antes de pasar al siguiente.
Principio: Ediciones mínimas y precisas
Al implementar cambios controlados, solo marca el texto que realmente cambia. Repetir texto sin cambios dificulta la revisión y parece poco profesional. Divide los reemplazos en: [texto sin cambios] + [eliminación] + [inserción] + [texto sin cambios]. Preserva el RSID de la ejecución original para el texto sin cambios extrayendo el elemento <w:r> del original y reutilizándolo.
Ejemplo - Cambiar "30 días" a "60 días" en una oración:
# MAL - Reemplaza toda la oración
'<w:del><w:r><w:delText>El plazo es de 30 días.</w:delText></w:r></w:del><w:ins><w:r><w:t>El plazo es de 60 días.</w:t></w:r></w:ins>'
# BIEN - Solo marca lo que cambió, preserva el <w:r> original para el texto sin cambios
'<w:r w:rsidR="00AB12CD"><w:t>El plazo es 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> días.</w:t></w:r>'
Flujo de trabajo de cambios controlados
-
Obtener representación en markdown: Convierte el documento a markdown preservando los cambios controlados:
pandoc --track-changes=all ruta-al-archivo.docx -o actual.md -
Identificar y agrupar cambios: Revisa el documento e identifica TODOS los cambios necesarios, organizándolos en lotes lógicos:
Métodos de ubicación (para encontrar cambios en XML):
- Números de sección/encabezado (ej., "Sección 3.2", "Artículo IV")
- Identificadores de párrafo si están numerados
- Patrones grep con texto circundante único
- Estructura del documento (ej., "primer párrafo", "bloque de firma")
- NO uses números de línea de markdown - no se corresponden con la estructura XML
Organización de lotes (agrupa de 3 a 10 cambios relacionados por lote):
- Por sección: "Lote 1: Enmiendas de la Sección 2", "Lote 2: Actualizaciones de la Sección 5"
- Por tipo: "Lote 1: Correcciones de fecha", "Lote 2: Cambios de nombre de parte"
- Por complejidad: Comienza con reemplazos de texto simples, luego aborda cambios estructurales complejos
- Secuencial: "Lote 1: Páginas 1-3", "Lote 2: Páginas 4-6"
-
Leer documentación y desempaquetar:
- OBLIGATORIO - LEER TODO EL ARCHIVO: Lee
ooxml.md(~600 líneas) completamente de principio a fin. NUNCA establezcas límites de rango al leer este archivo. Presta especial atención a las secciones "Biblioteca Document" y "Patrones de cambios controlados". - Desempaquetar el documento:
python ooxml/scripts/unpack.py <archivo.docx> <directorio> - Anotar el RSID sugerido: El script de desempaquetado sugerirá un RSID para usar en tus cambios controlados. Copia este RSID para usarlo en el paso 4b.
- OBLIGATORIO - LEER TODO EL ARCHIVO: Lee
-
Implementar cambios en lotes: Agrupa los cambios de forma lógica (por sección, por tipo o por proximidad) e impleméntalos juntos en un solo script. Este enfoque:
- Facilita la depuración (lote más pequeño = más fácil aislar errores)
- Permite un progreso incremental
- Mantiene la eficiencia (el tamaño de lote de 3 a 10 cambios funciona bien)
Agrupaciones de lotes sugeridas:
- Por sección del documento (ej., "Cambios en la Sección 3", "Definiciones", "Cláusula de rescisión")
- Por tipo de cambio (ej., "Cambios de fecha", "Actualizaciones de nombre de parte", "Reemplazos de términos legales")
- Por proximidad (ej., "Cambios en las páginas 1-3", "Cambios en la primera mitad del documento")
Para cada lote de cambios relacionados:
a. Mapear texto a XML: Busca texto en
word/document.xmlpara verificar cómo se divide el texto en elementos<w:r>.b. Crear y ejecutar script: Usa
get_nodepara encontrar nodos, implementa cambios, luegodoc.save(). Consulta la sección "Biblioteca Document" en ooxml.md para patrones.Nota: Siempre busca en
word/document.xmlinmediatamente antes de escribir un script para obtener los números de línea actuales y verificar el contenido del texto. Los números de línea cambian después de cada ejecución de script. -
Empaquetar el documento: Después de que todos los lotes estén completos, convierte el directorio desempaquetado de vuelta a .docx:
python ooxml/scripts/pack.py desempaquetado documento-revisado.docx -
Verificación final: Haz una verificación exhaustiva del documento completo:
- Convierte el documento final a markdown:
pandoc --track-changes=all documento-revisado.docx -o verificacion.md - Verifica que TODOS los cambios se aplicaron correctamente:
grep "frase original" verificacion.md # NO debería encontrarla grep "frase de reemplazo" verificacion.md # Debería encontrarla - Verifica que no se introdujeron cambios no deseados
- Convierte el documento final a markdown:
Conversión de documentos a imágenes
Para analizar visualmente documentos de Word, conviértelos a imágenes usando un proceso de dos pasos:
-
Convertir DOCX a PDF:
soffice --headless --convert-to pdf documento.docx -
Convertir páginas PDF a imágenes JPEG:
pdftoppm -jpeg -r 150 documento.pdf paginaEsto crea archivos como
pagina-1.jpg,pagina-2.jpg, etc.
Opciones:
-r 150: Establece la resolución a 150 DPI (ajusta para equilibrio calidad/tamaño)-jpeg: Salida en formato JPEG (usa-pngpara PNG si se prefiere)-f N: Primera página a convertir (ej.,-f 2comienza desde la página 2)-l N: Última página a convertir (ej.,-l 5se detiene en la página 5)pagina: Prefijo para los archivos de salida
Ejemplo para un rango específico:
pdftoppm -jpeg -r 150 -f 2 -l 5 documento.pdf pagina # Convierte solo las páginas 2-5
Pautas de estilo de código
IMPORTANTE: Al generar código para operaciones DOCX:
- Escribe código conciso
- Evita nombres de variables verbosos y operaciones redundantes
- Evita declaraciones print innecesarias
Dependencias
Dependencias requeridas (instala si no están disponibles):
- pandoc:
sudo apt-get install pandoc(para extracción de texto) - docx:
npm install -g docx(para crear nuevos documentos) - LibreOffice:
sudo apt-get install libreoffice(para conversión a PDF) - Poppler:
sudo apt-get install poppler-utils(para pdftoppm y convertidor PDF a imágenes) - defusedxml:
pip install defusedxml(para análisis seguro de XML)