Skip to main content

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

项目描述

贝塔 许可证:AGPL-3 OCA/报告引擎 在 Weblate 上翻译我 试试我的 Runbot

py3o 报告引擎是基于Libreoffice的 Odoo 报告引擎:

  • 该报告是使用 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)配置文档,用户将能够在生成后使用 Libreoffice(或 Word)修改文档通过 Odoo。

  • 轻松开发 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 模板用作替代品,您必须更改一些细节。

目录

<nav class="contents local" id="contents" role="doc-toc"> </nav>

安装

安装所需的 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 服务器的受信任路径中的模板。在这种情况下,您必须让模块条目为空,并将模板的路径指定为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 中作为对象公开,您也可以在其上调用函数。

可用的功能和对象

用户

浏览当前用户记录

用户公司的语言为字符串(ISO 代码)

b64解码

base64.b64decode

格式多行值(字符串)

生成<br/> 的 ODF 等价物 用于多行字段(ODF 内部是 XML,否则将跳过这些字段)

html_sanitize(字符串)

清理 HTML 字符串

时间

Python的时间模块

显示地址(合作伙伴)

返回合作伙伴地址的格式化字符串

o_format_lang(值,lang_code=False,digits=None,分组=True,货币=False,dp=False,currency_obj=False,no_break_space=True)

根据上下文语言和时区返回格式化的数字或货币值

o_format_date(值,lang_code=False,date_format=False)

根据上下文语言和时区返回格式化的日期或时间值

示例报告模板

Github 项目odoo-py3o-report-templates上提供了主要 Odoo 原生报告(发票、销售订单、采购订单、拣货等)的示例 py3o 报告模板。

已知问题/路线图

  • 生成条形码?

  • 在演示文件中添加更详细的示例以展示功能

  • 添加迁移指南 aeroo -> py3o

错误追踪器

在GitHub 问题上跟踪错误。如果遇到问题,请检查您的问题是否已被报告。如果您首先发现它,请通过提供详细且受欢迎的 反馈来帮助我们粉碎它。

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

学分

作者

  • 徐工咨询

  • ACSONE SA/NV

贡献者

维护者

该模块由 OCA 维护。

Odoo 社区协会

OCA 或 Odoo 社区协会是一个非营利组织,其使命是支持 Odoo 功能的协作开发并促进其广泛使用。

该模块是GitHub 上OCA/reporting-engine项目的一部分。

欢迎您贡献。要了解如何,请访问https://odoo-community.org/page/Contribute

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

内置分布

odoo13_addon_report_py3o-13.0.1.0.5-py3-none-any.whl (213.3 kB 查看哈希

已上传 py3