Binario B64 a Archivo Fisico Temporal
Ultimamente me han pedido desarrollar reportes en Excel, para esto me apoyo mucho de la libreria xlsxwriter o del modulo report_xlsx, pero muchas veces es necesario utilizar el logo dentro del reporte, en Qweb seria muy sencillo ya que la utilidad hace la conversión del binario, pero en mi caso no fue asi, existen 2 maneras de hacerlo metiendo la ruta fisica del archivo dentro de nuestro moulo o la segunda la cual vengo a enseñarles, guardar el campo a un archivo temporal, en el siguiente ejemplo cree 2 funciones para guardar el logo dato que requiero para dar formato a mi excel.
import tempfile import base64 import binascii import os class ClaseOdoo(models.Model): _name = 'mi.clase' _inherit ='mi.clase' def b64str_to_tempfile(self, b64_str=None, file_suffix=None, file_prefix=None): """ @param b64_str : Text in Base_64 format for add in the file @param file_suffix : Sufix of the file @param file_prefix : Name of file in TempFile """ (fileno, fname) = tempfile.mkstemp(file_suffix, file_prefix) f = open(fname, 'wb') f.write(base64.decodestring(b64_str or '')) f.close() os.close(fileno) return fname def logo_b64_str_to_physical_file(self, b64_str, file_extension='png', prefix='company_logo'): certificate_lib = self.env['facturae.certificate.library'] b64_temporal_route = self.b64str_to_tempfile(base64.encodestring(''), file_suffix='.%s' % file_extension, file_prefix='odoo__%s__' % prefix) _logger.info("\n### b64_temporal_route %s " % b64_temporal_route) ### Guardando el Logo ### f = open(b64_temporal_route, 'wb') f.write(base64.b64decode(b64_str)) f.close() file_result = open(b64_temporal_route, 'rb').read() return file_result, b64_temporal_route
Como paso final solo necesitamos el fragmento de codigo que llame a estas funciones:
company_logo = self.env.user.company_id.logo print ("###### company_logo >>>>>>> ", company_logo) if company_logo: file_result_b64, logo_path_b64 = self.logo_b64_str_to_physical_file(company_logo, 'png', 'company_logo') print ("#### logo_path_b64 >>>>>>>> ",logo_path_b64) image_module_path = logo_path_b64 else: module_path = module.get_module_path('mi_modulo') #print "########## MODULE PATH >>> ",module_path image_module_path = module_path+'/static/img/logo.jpg'
0 comentarios:
Publicar un comentario