Biblioteca python-docx (3) Formatos
No soy yo muy partidario de dedicar tiempo a estas cuestiones, teniendo por delante tantas cosas aun por resolver, pero no queda otro remedio que incluir algunas cosas referidas al formato cuando se trata de generar documentos de forma automática. Por ello dedicaré esta entrada a estas cuestiones; las mínimas.
Por empezar por algún lado, y por eso de la frecuencia de uso (y la utilidad), se me ocurre que nos puede interesar aprender a formatear los párrafos centrándolos, justificándolos, o alineándolos a derecha o izquierda.
Para ello lo primero que tenemos que hacer es añadir el acceso a un conjunto de funciones mediante la instrucción pertinente (from docx.enum.text import WD_ALIGN_PARAGRAPH) y tomaré un texto suficientemente largo para que se puedan observar los diferentes ajustes. Este texto queda asociado a la función add_paragraph() como parámetro (parrafo1 = documento.add_paragraph(texto1)) y se escribe en el texto sin formato de ningún tipo; pero si a continuación añadimos la instrucción parrafo1.alignment = WD_ALIGN_PARAGRAPH.RIGHT, el párrafo pasa a estar alineado a la derecha, así que sólo tenemos que sustituir la palabra RIGHT por sus alternativas (.LEFT - .RIGHT - .CENTER - .JUSTIFY) , para que se justifique de acuerdo a lo ellas.
Esta es, posiblemente, la forma más sencilla de trabajar con formatos en python-docx, ya que otras opciones de formateo del texto exigen mayor complejidad en su codificación. Por ejemplo, algo tan sencillo como escribir en negrita , cursiva o subrayado requieren otro tipo de estrategias basadas en el uso de la función add_run(). Supongamos, por ejemplo, que queremos destacar una palabra dentro de un párrafo escribiéndola en negrita. El procedimiento sería el siguiente:
- Primero escribimos el texto que precede a la palabra a resaltar como párrafo sin formato (parrafo=documento.add_paragraph('En este segundo párrafo vamos a poner palabras en '))
- Y después, para escribir la palabra (o las palabras) en negrita asociamos a la variable parrafo la función ad_run() incluyendo como parámetro dicha palabra, seguida del atributo booleano .bold con su valor en True (parrafo.add_run('negrita').bold = True). Para cursiva (.italic = True) y para subrayado (.inderline = True), actuaríamos igual; incluso para añadir más texto sin ninguno de estos tres formatos deberemos emplear la función add_run() asociada a la variable parrafo (v.g. parrafo.add_run(' y palabras en '))
Un ejemplo de complejidad de formateo que yo considero extremo en cuanto a complejidad (por comparación con lo simple que resulta "manualmente") es definir el tamaño y el tipo de fuente, siendo como es una funcionalidad que podemos considerar básica en el uso de un procesador de texto. En este caso...
- Primero debemos importar un conjunto de funciones específicas .docx (from docx.enum.style import WD_STYLE_TYPE) requiriendo haber importado previamente el manejo de valores de tamaño de fuente (from docx.shared import Pt)
- Después debemos asociar a una variable (v.g. styles) el manejo de las funciones de estilo asociadas al documento que referenciamos mediante la variable documento a la que previamente se asoció el objeto creado con la función Document() (styles = documento.styles)
- Sobre la variable styles llamamos a la función add_style() que recibe dos parámetros: el primero un string con la denominación que vamos a emplear (vg. 'Calibri_12') y un segundo parámetro con referencia al atributo WD_STYLE_TYPE.CHARACTER (todo ello queda asociado a la variable -vg- charstyle -> charstyle = styles.add_style('Calibri_12', WD_STYLE_TYPE.CHARACTER))
- Después accedemos al objeto charstyle.font, que a su vez asignamos a la variable obj_font
- Y sobre ella al atributo tamaño (obj_font.size = Pt(12)) y nombre de la fuente (obj_font.name = 'Calibri')
Una vez que ya tenemos creado este conjunto de características puedes usarlo para añadirlo como segundo parámetro de la función add_run() asociada a la variable parrafoX para que el texto que se escriba quede formateado según la fuente y el tamaño que definiste antes. Esto se realiza en dos pasos:
- Se asocia el añadido de la párrafo al documento a una variable (parrafo1 = documento.add_paragraph())
- Y sobre ella se aplica la función add-run() con dos parámetros: el texto a escribir y el atributo style al que se asigna el identificador del formato que se estableció según el procedimiento anterior (parrafo1.add_run(texto1, style = 'Calibri_12'))
Este procedimiento es especialmente interesante cuando se va a trabajar con varios estilos de letra (fuente y tamaño), aunque se puede simplificar cuando el modo de proceder va a ser más sencillo, accediendo al atributo fuente del objeto run (run = parrafo1.runs[0] -> font = run.font -> font.name = 'Calibri' + font.size = Pt(12)). Todo este código queda en el script que acompaña esta entrada comentado para que no interfiera en el funcionamiento del algoritmo de base.
Documento. No sé si larga, pero algo liosa sí que ha sido esta entrada, así que va siendo hora de finalizarla con la ya esperable referencia al script asociado.
No hay comentarios:
Publicar un comentario
Comenta esta entrada