GeneraciĆ³n de reportes en formato Doc/Docx integrado a Odoo
Mas de uno de nosotros hemos tenido la curiosidad o necesidad de Generar reportes en formato Doc(x), esto es posible gracias a Python y a la gran cantidad de librerias que se crean y existen, en este Post les enseƱare un par de librerias que nos ayudan a generar este tipo de Reportes.
InstalaciĆ³n
Haremos uso de la libreria python-docx alojada en los Repositorios de Python, para ello podemos utilizar la aplicaciĆ³n Pip en Linux o easy_install.sudo pip install python-docxo
sudo easy_install install python-docx
ImplementaciĆ³n
El primer paso que debemos realizar como cualquier libreria es importarla en nuestra Clase Odoo.
from docx import Document
Creamos una instancia de la libreria y la asignamos a una variable para poder generar nuestro Documento.
report_word = Document()
A partir de nuestra variable instanciada, podemos ir aƱadiendo informaciĆ³n tomada de nuestro recordset o bien para ejemplos, podemos usar informaciĆ³n ficticia.
Algunos ejemplos de lo que podemos hacer con la libreria son:
Agregar un Parrafo
report_word = Document() paragraph = report_word.add_paragraph('Hola, este es mi primer parrafo con la libreria docx')
Agregar una cabecera
report_word = Document() report_word.add_heading('Dream big and start with something small')
Agregar una tabla
report_word = Document() report_word.add_table(rows=2, cols=2)
Un ejemplo completo seria:
from docx import Document from docx.shared import Inches document = Document() document.add_heading('Document Title', 0) p = document.add_paragraph('A plain paragraph having some ') p.add_run('bold').bold = True p.add_run(' and some ') p.add_run('italic.').italic = True document.add_heading('Heading, level 1', level=1) document.add_paragraph('Intense quote', style='IntenseQuote') document.add_paragraph( 'first item in unordered list', style='ListBullet' ) document.add_paragraph( 'first item in ordered list', style='ListNumber' ) document.add_picture('monty-truth.png', width=Inches(1.25)) table = document.add_table(rows=1, cols=3) hdr_cells = table.rows[0].cells hdr_cells[0].text = 'Qty' hdr_cells[1].text = 'Id' hdr_cells[2].text = 'Desc' for item in recordset: row_cells = table.add_row().cells row_cells[0].text = str(item.qty) row_cells[1].text = str(item.id) row_cells[2].text = item.desc document.add_page_break() document.save('demo.docx')
Si quieren conocer mas acerca de la libreria:
https://python-docx.readthedocs.io/en/latest/
Gracias GermƔn
ResponderBorrarHola, por favor ayĆŗdame con esta pregunta: es posible agregar pie de pĆ”gina y encabezado con la librerĆa. AdemĆ”s, se puede agregar una imagen dentro de una tabla.
ResponderBorrarMuchas gracias por tu ayuda.
Buenos dias Caro, claro que es posible aunque aƱadir la imagen requerirĆ” que la vuelques a un archivo temporal del sistema operativo para despuĆ©s recuperar la direcciĆ³n fisica de archivo y referenciarlo en el documento de word.
BorrarSaludos