基于libreoffice的报表引擎(odt->odt,odt->pdf,odt->doc,odt->docx,ods->ods等)
odoo12-addon-report-py3o的Python项目详细描述
py3o报告引擎是基于Libreoffice:
- 报告由libreoffice(odt或ods)创建,
- 报表以opendocument格式(.odt或.ods文件)存储在服务器上。
- 报告以opendocument格式或libreoffice支持的任何输出格式(pdf、html、doc、docx、docbook、xls等)发送给用户。
基于libreoffice的报告引擎的主要优点是:
- 不需要开发人员来创建或修改报表:报表是用libreoffice创建和修改的。所以这个报告引擎有一个完整的所见即所得报告开发工具!
- 对于a4/letter格式的pdf报告,使用libreoffice这样的工具来创建a4/letter文档比使用html/css来开发要容易得多,而且基于html/css的解决方案也不太支持某些打印特性(背景、边距框)。
- 如果希望用户能够在odoo生成文档后对其进行修改,只需使用odt输出(或doc或docx)配置文档,用户就可以在odoo生成文档后使用libreoffice(或word)对其进行修改。
- 易于开发ods格式的电子表格报告(可以输出xls)。
这个模块report_py3o是py3o报告引擎的基本模块。如果单独使用,它将为每个odt到pdf(或odt到docx,…)文档转换生成libreoffice进程。这是一个缓慢的问题,如果您有大量的报告要从odt转换成另一种格式,这可能会成为一个问题。在这种情况下,您应该考虑additionnal模块report_py3o_fusion_server,它设计用于libreoffice守护进程。有了report_py3o_fusion_server,技术环境的设置更加复杂,因为您必须安装附加的软件组件并运行两个守护程序,但是您有更好的性能,并且可以在odoo中配置libreoffice pdf导出选项(允许生成pdf表单、pdf/a文档,密码保护的PDF、带水印的PDF等)。
这个报告引擎是Aeroo的替代品:这两个报告引擎有相似的特性,但它们的实现完全不同。你不能使用Aeroo模板作为替换,但是你必须改变一些细节。
目录
Installation
安装所需的python libs:
pip install py3o.template pip install py3o.formats
要允许将odt或ods报告转换为其他格式(pdf、doc、docx等),请安装libreoffice:
apt-get --no-install-recommends install libreoffice
Configuration
例如,要用自定义PY3O报表替换本机发票报表,请在自定义模块中添加以下XML文件:
<?xml version="1.0" encoding="utf-8"?> <odoo> <record id="account.account_invoices" model="ir.actions.report"> <field name="report_type">py3o</field> <field name="py3o_filetype">odt</field> <field name="module">my_custom_module_base</field> <field name="py3o_template_fallback">report/account_invoice.odt</field> </record> </odoo>
其中my_custom_module_base是自定义odoo模块的名称。在本例中,invoice odt文件位于my_custom_module_base/report/account_invoice.odt中。
也可以引用位于 奥多服务器。在这种情况下,必须让module条目为空并指定 模板路径为py3o_template_fallback。
<?xml version="1.0" encoding="utf-8"?> <odoo> <record id="account.account_invoices" model="ir.actions.report"> <field name="report_type">py3o</field> <field name="py3o_filetype">odt</field> <field name="py3o_template_fallback">/odoo/templates/py3o/report/account_invoice.odt</field> </record> </odoo>
此外,还必须修改odoo服务器配置文件以声明 py3o模板允许的根目录。仅定位模板 PY3O报表可以加载到此目录中。
[options] ... [report_py3o] root_tmpl_path=/odoo/templates/py3o
如果您想要PDF格式的发票而不是ODT格式的发票,XML文件应该如下所示:
<?xml version="1.0" encoding="utf-8"?> <odoo> <record id="account.account_invoices" model="ir.actions.report"> <field name="report_type">py3o</field> <field name="py3o_filetype">pdf</field> <field name="module">my_custom_module_base</field> <field name="py3o_template_fallback">report/account_invoice.odt</field> </record> </odoo>
如果要添加新的py3o pdf报告(和不替换本机报表),XML文件应如下所示:
<?xml version="1.0" encoding="utf-8"?> <odoo> <record id="partner_summary_report" model="ir.actions.report"> <field name="name">Partner Summary</field> <field name="model">res.partner</field> <field name="report_name">res.partner.summary</field> <field name="report_type">py3o</field> <field name="py3o_filetype">pdf</field> <field name="module">my_custom_module_base</field> <field name="py3o_template_fallback">report/partner_summary.odt</field> <!-- Add entry in "Print" drop-down list --> <field name="binding_type">report</field> <field name="binding_model_id" ref="base.model_res_partner"/> </record> </odoo>
Configuration parameters
- py3o.转换指令
- 用于运行转换的命令,默认为libreoffice。如果更改此项,则此处设置的任何内容都必须接受参数--headless--convert-to $ext $file,并将结果文件放入扩展名为$ext的$file目录中。命令将在$file目录中启动。
Usage
模板语言是extensively documented,这些记录在libreoffice中公开为objects,您还可以对其调用函数。
Available functions and objects
- 用户
- 浏览当前用户的记录
- 语言
- 用户公司的语言为字符串(ISO代码)
- b64解码
- base64.b64decode
- 格式化多行值(字符串)
- 为多行字段生成等价于<br/>和 的odf(odf在内部是xml,否则将跳过这些字段)
- HTML清理(字符串)
- 清理HTML字符串
- 时间
- python的{tt10}$模块
- 显示地址(合作伙伴)
- 返回合作伙伴地址的格式化字符串
- o_format_lang(值,lang_code=false,digits=none,grouping=true,monetary=false,dp=false,currency_obj=false,no_break_space=true)
- 根据上下文语言和时区返回格式化的数值或货币值
- o_format_date(值,lang_code=false,date_format=false)
- 根据上下文语言和时区返回格式化的日期或时间值
Sample report templates
github项目odoo-py3o-report-templates上提供了主要odoo本机报告(发票、销售订单、采购订单、提货单等)的py3o报告模板示例。
Known issues / Roadmap
- 生成条形码?
- 在演示文件中添加更详细的示例以展示功能
- 添加迁移指南Aeroo->;PY3O
Credits
Contributors
- 弗洛伦特助手(XCG Consulting)
- 劳伦特·米格农,laurent.mignon@acsone.eu>;,
- Alexis de Lattre & lt;^ {A37 }>,
- guewen baconnier<;guewen.baconnier@camptocamp.com>;
- 奥马尔卡斯蒂涅拉<;omar@comunitea.com>;
- 霍尔格·布鲁恩hbrunn@therp.nl>;
Maintainers
此模块由OCA维护。
oca,或odoo社区协会,是一个非营利性组织 任务是支持odoo特性和 促进其广泛应用。
此模块是github上OCA/reporting-engine项目的一部分。
欢迎您的贡献。要了解如何访问https://odoo-community.org/page/Contribute。