Saltar al contenido

Extraiga la posición de la imagen del archivo .docx usando python-docx

Buscamos por diferentes foros para traerte la solución para tu duda, si continúas con inquietudes déjanos la inquietud y te responderemos porque estamos para servirte.

Solución:

Esta operación no es compatible directamente con la API.

Sin embargo, si está dispuesto a indagar un poco en las partes internas y usar el lxml API es posible.

El enfoque general sería acceder a la ImagePart instancia correspondiente a la imagen que desea inspeccionar y modificar, luego lea y escriba el ._blob attribute (que contiene el archivo de imagen como bytes).

Este XML de muestra podría ser útil: http://python-docx.readthedocs.io/en/latest/dev/analysis/features/shapes/picture.html#specimen-xml

De la forma en línea que contiene la imagen, se obtiene la elemento con esto:

blip = inline_shape._inline.graphic.graphicData.pic.blipFill.blip

La identificación de la relación (r:id generalmente, pero r:embed en este caso) está disponible en:

rId = blip.embed

Luego puede obtener la parte de la imagen de la parte del documento.

document_part = document.part
image_part = document_part.related_parts[rId]

Y luego la imagen binaria está disponible para lectura y escritura en ._blob.

Si escribe un nuevo blob, reemplazará la imagen anterior cuando se guarde.

Probablemente desee que funcione con una sola imagen y familiarizarse con ella antes de escalar a varias imágenes en un solo documento.

Puede haber una o dos características de imagen almacenadas en caché, por lo que es posible que no obtenga todos los puntos más finos hasta que guarde y vuelva a cargar el archivo, así que esté atento a eso.

No es para los débiles de corazón, como puede ver, pero debería funcionar si lo desea lo suficiente y puede rastrear un poco el código 🙂

También puede inspeccionar párrafos con un bucle simple y verificar qué xml contiene una imagen (por ejemplo, si un xml contiene “graphicData”), es decir, cuál es un contenedor de imágenes (puede hacer lo mismo con las ejecuciones):

from docx import Document

image_paragraphs = []
doc = Document(path_to_docx)
for par in doc.paragraphs:
    if 'graphicData' in par._p.xml:
        image_paragraphs.append(par)

Después de descomprimir el archivo docx, las imágenes están en la carpeta “imágenes” y están en el mismo orden en que estarán en la lista image_paragraphs. En cada elemento de párrafo, tiene muchas opciones para cambiarlo. Si desea extraer img, procéselo y luego insértelo en el mismo lugar, entonces

paragraph.clear()
paragraph.add_run('your description, if needed')
run = paragraph.runs[0]
run.add_picture(path_to_pic, width, height)

Puntuaciones y reseñas

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *