Escribiendo ficheros docx de Word con Python. Capítulo IV – Texto

En este capítulo vamos a seguir avanzando en nuestras habilidades para la creación de documentos en formato docx. El resto de capítulos del tutorial los puedes ver aquí.

Para seguir avanzando vamos a añadir nuevas cosas al documento además de párrafos.

Comenzamos, como siempre, importando algunas cosas:

Ya vimos como podíamos añadir párrafos usando el método add_paragraph:

Añadiendo imágenes

En este momento, cuando hablo de añadir imágenes, me refiero a las imágenes típicas que suele haber en un documento que están separadas de otros párrafos.

Primero de todo vamos a descargar una imagen de internet, el logo de pybonacci, para poder usarla:

Añadimos ahora la nueva imagen usando el método add_picture:

Guardamos el documento y lo visualizamos usando un procesador de texto:

Deberíamos de ver algo parecido a lo siguiente:

Vamos a ver todo lo que proporciona lo que acabamos de usar para añadir la imagen:

Nos mostrará algo parecido a lo siguiente:

Dispone de pocas cosas que podamos toquetear. Nos permite leer o definir el ancho y/o alto de la figura.

Si miramos el tipo:

Vemos que el tipo se llama InlineShape. Una traducción literal sería algo como ‘Forma entre lineas’. En procesadores de texto como Libreoffice o Microsoft Word tenemos dos capas de información, una capa de texto, que es lo que hemos estado usando hasta ahora, y una capa de dibujo. Esta segunda no la vamos a poder manejar con las versiones de python-docx disponibles en este momento. La segunda capa la podemos ver como una capa donde podemos añadir imágenes flotantes en posiciones arbitrarias.

Un ejemplo hecho a mano en Libreoffice usando el documento que acabamos de crear, al cual le hemos añadido una forma flotante usando la capa de dibujo, podría ser algo como lo siguiente:

Puedes leer un poco más sobre esto de la capa de dibujo y las formas flotantes aquí.

Añadiendo encabezados/títulos

Todo documento que se precie tiene diferentes capítulos, partes, contenidos,… Para separarlos podemos usar encabezados o titulos para esas diferentes partes.

El objeto Document tiene un método que se llama add_heading (no confundir con header que ya vimos anteriormente en capítulos previos de este tutorial).

Vamos a usar ese método:

Como véis, el método acepta un texto, que será el texto para el encabezado, y un nivel, que indicará el tamaño del encabezado siendo 0 para un título y valores de 1 a 9 siendo 1 el encabezado de mayor tamaño y 9 el encabezado de menor tamaño.

Si guardamos el documento nuevamente y lo visualizamos en un procesador de texto:

Veremos algo como lo siguiente:

Si miramos el tipo:

Lo anterior mostrará:

Vemos que es un Paragraph. Si miramos un poco mas en detalle.

Lo anterior mostrará:

Vemos que son párrafos con estilos diferentes y por eso se ven de forma diferente. Entraremos más en detalle en los estilos más adelante.

Añadiendo saltos de página

Esto ya lo hemos usado anteriormente. Vamos a verlo de nuevo brevemente:

Lo anterior nos mostrará:

Vemos que su tipo es Paragraph y que lo que contiene se representa como un salto de linea. Entre sus propiedades no vemos nada especial.

Me surge una pregunta. ¿Cómo sé que estoy ante un salto de página? De momento, desde la propia biblioteca parece complicado y hay que ensuciarse las manos.

Añadiendo tablas

También se pueden añadir tablas de forma sencilla usando el método add_table. Sigamos con nuestros ejemplos:

Lo anterior mostrará:

Vemos que es un objeto del tipo Table. Veamos lo que nos ofrece este nuevo objeto:

Lo anterior nos mostrará lo siguiente en pantalla:

Podríamos rellenar las tablas de varias formas. Yo voy a usar una. Vosotros podéis ser imaginativos y probar otras diferentes:

Si ahora guardamos el documento de nuevo:

Deberiamos ver algo como lo siguiente:

Fin, de momento.

Ya has visto como meter contenido de distintas formas en el documento. Todavía es muy primitivo lo que estamos haciendo. Nos quedan ver unas cuantas cosas como formatear nuestro texto, añadir nuevas secciones, darle formato al documento,… Seguimos en el próximo.

Deja una respuesta

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

twenty seven − 21 =