跳转到主要内容

基于Libreoffice的报表引擎(ODT -> ODT, ODT -> PDF, ODT -> DOC, ODT -> DOCX, ODS -> ODS, 等。)

项目描述

Beta License: AGPL-3 OCA/reporting-engine Translate me on Weblate Try me on Runbot

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 上。如有问题,请先查看是否已有报告。如果是首次发现,请通过提供详细且受欢迎的 反馈 来帮助我们解决问题。

请不要直接联系贡献者寻求支持或技术问题的帮助。

致谢

作者

  • 赛克斯咨询

  • ACSONE SA/NV

贡献者

维护者

此模块由OCA维护。

Odoo Community Association

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 (216.5 kB 查看哈希值)

上传时间 Python 3

支持