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/