aeroo_report_printscreen 模块问题

aeroo_report_printscreen 模块不能显示中文表头

AEROO 是非常优秀的 OpenERP 模块,提供了使用 ODT/ODS 文件直接作为报表模版的功能。其中 aeroo_report_printscreen 模块更是实现了直接将 OpenERP 列表显示的数据直接导出为 ODS 电子表格的功能,这是一个非常实用的功能,论方便性远远超过了 OpenEPR 内置的导出。

但在实际开发中我们发现 AEROO 报表模块存在一个 bug,造成屏幕打印导出的数据表头不能显示中文。经过调试跟踪,发现此问题的原因在于 ExtraFunctions.py 文件没有很好地处理 UTF-8 编码:

if isinstance(obj, (str,unicode)) or hasattr(obj, field):
labels = self.pool.get(model).fields_get(self.cr, self.uid, allfields=[field], context=self.context)
return labels[field]['string']

解决方案

修正的方法是增加一步 UTF-8 解码的步骤:

if isinstance(obj, (str,unicode)) or hasattr(obj, field):
labels = self.pool.get(model).fields_get(self.cr, self.uid, allfields=[field], context=self.context)
ret = labels[field]['string']
if isinstance(ret, str):
ret = ret.decode("utf-8")
return ret

经过上述的修改,aeroo_report_printscreen 模块就能成功地打印中文表头了。