基于Libreoffice的报表引擎(ODT -> ODT, ODT -> PDF, ODT -> DOC, ODT -> DOCX, ODS -> ODS, 等。)
项目描述
py3o报表引擎是基于Libreoffice的Odoo报表引擎
报表是用Libreoffice(ODT或ODS)创建的
报表以OpenDocument格式(.odt或.ods文件)存储在服务器上
报表以OpenDocument格式或Libreoffice支持的任何输出格式(PDF,HTML,DOC,DOCX,Docbook,XLS等)发送给用户
基于Libreoffice的报表引擎的关键优势是
无需是开发者即可创建或修改报表:报表是用Libreoffice创建和修改的。因此,该报表引擎具有完整的WYSIWYG报表开发工具!
对于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到其他格式的报告,可能会成为问题。在这种情况下,您应考虑添加额外的模块report_py3o_fusion_server,它设计用于与libreoffice守护进程一起工作。使用report_py3o_fusion_server,技术环境更复杂,因为您必须安装额外的软件组件并运行2个守护进程,但您将获得更好的性能,并且可以在Odoo中配置libreoffice PDF导出选项(允许生成PDF表单、PDF/A文档、密码保护的PDF、水印PDF等)。
此报告引擎是Aeroo的替代品:Aeroo:这两个报告引擎具有类似的功能,但它们的实现完全不同。虽然您不能直接使用aeroo模板作为替换,但您需要更改一些细节。
目录
安装
安装所需的Python库
pip install py3o.template
pip install py3o.formats
为了允许将ODT或ODS报告转换为其他格式(PDF、DOC、DOCX等),安装libreoffice
apt-get --no-install-recommends install libreoffice
配置
例如,要替换原生发票报告为自定义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模块的名称。在此示例中,发票ODT文件位于my_custom_module_base/report/account_invoice.odt。
还可以引用位于Odoo服务器受信任路径中的模板。在这种情况下,必须将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>
配置参数
- py3o.conversion_command
用于运行的转换命令,默认为libreoffice。如果更改此设置,则此处设置的任何内容都必须接受参数--headless --convert-to $ext $file并将结果文件放入文件$file的目录中,扩展名为$ext。命令将在文件$file的目录中启动。
使用
模板语言有广泛的文档,记录在libreoffice中作为对象暴露,您还可以在这些对象上调用函数。
可用的函数和对象
- user
浏览当前用户的记录
- lang
用户公司语言作为字符串(ISO代码)
- b64decode
base64.b64decode
- format_multiline_value(string)
为多行字段生成ODF等效的
和 (ODF内部是XML,否则这些将被跳过)- html_sanitize(string)
清理HTML字符串
- time
Python的time模块
- display_address(partner)
返回合作伙伴的地址的格式化字符串
- o_format_lang(value, lang_code=False, digits=None, grouping=True, monetary=False, dp=False, currency_obj=False, no_break_space=True)
根据上下文语言和时区返回格式化的数值或货币值
- o_format_date(value, lang_code=False, date_format=False)
根据上下文语言和时区返回格式化的日期或时间值
示例报告模板
主Odoo原生报告(如发票、销售订单、采购订单、拣选等)的示例py3o报告模板可在GitHub项目 odoo-py3o-report-templates 中找到。
已知问题/路线图
生成条码?
在演示文件中添加更多详细示例以展示功能
添加aeroo -> py3o迁移指南
错误跟踪器
问题跟踪在 GitHub Issues 上。如有问题,请先查看是否已有报告。如果是首次发现,请通过提供详细且受欢迎的 反馈 来帮助我们解决问题。
请不要直接联系贡献者寻求支持或技术问题的帮助。
致谢
贡献者
弗洛伦·艾德(《赛克斯咨询XCG Consulting》)
洛朗·米尼奥 <laurent.mignon@acsone.eu>,
亚历克斯·德·拉特雷 <alexis.delattre@akretion.com>,
格维恩·巴科尼耶 <guewen.baconnier@camptocamp.com>
奥马尔·卡斯蒂涅拉 <omar@comunitea.com>
霍尔格·布伦 <hbrunn@therp.nl>
维护者
此模块由OCA维护。
OCA,即Odoo社区协会,是一个非营利组织,其使命是支持Odoo功能的协作开发并推广其广泛应用。
此模块是GitHub上的OCA/reporting-engine项目的一部分。
欢迎您贡献力量。了解如何贡献,请访问 https://odoo-community.org/page/Contribute。
项目详情
odoo12_addon_report_py3o-12.0.2.1.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8c4d38469ffcd63e4980d80e22a90059179c437f11cc099080790641b0039e46 |
|
MD5 | acfc8b73c9731afc6143c1de7ca0a307 |
|
BLAKE2b-256 | 7fadf2699cdf33f27db97e0dcb9acbc95f671ef7d87f44dda6620f2993c13cef |