基于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报表,使用设计用于创建A4/Letter文档的工具(如Libreoffice)开发它比在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 模板作为替代品,但你必须更改一些细节。
目录
安装
安装所需的 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 的目录中启动。
使用方法
模板语言有详细的文档 http://py3otemplate.readthedocs.io/en/latest/templating.html,记录在 libreoffice 中作为 objects 揭示,您还可以在它们上调用函数。
可用的函数和对象
- 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咨询》)
劳伦特·米尼奥 <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。
项目详情
哈希值 for odoo13_addon_report_py3o-13.0.1.0.6-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2ce1b286bd7ff6ffd469178e93398b348044d308cbf59443946999075f21c9cc |
|
MD5 | 1a7f5b5a1f0a2a3b2b4b5b6b7b8b9b0b1 |
|
BLAKE2b-256 | cd80d033f6eeea595a2fe2d190a6a7789245229c6da031457885bbd2fceab8e0 |