跳转到主要内容

基于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 Runboat

py3o报表引擎是基于Libreoffice的Odoo报表引擎

  • 报表使用Libreoffice(ODT或ODS)创建

  • 报表以OpenDocument格式(.odt或.ods文件)存储在服务器上

  • 报表以OpenDocument格式或Libreoffice支持的任何输出格式(PDF、HTML、DOC、DOCX、Docbook、XLS等)发送给用户

基于Libreoffice的报表引擎的主要优点是

  • 无需是开发者即可创建或修改报表:报表使用Libreoffice创建和修改。因此,此报表引擎具有完整的WYSIWYG报表开发工具!

  • 对于A4/Letter格式的PDF报表,使用如Libreoffice之类的工具开发它比使用HTML/CSS更容易,后者是为了创建A4/Letter文档而设计的,同时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 的目录中启动。

使用方法

模板语言有 广泛的文档,记录在 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咨询

  • ACSONE SA/NV

贡献者

维护者

本模块由OCA维护。

Odoo Community Association

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

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

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

项目详情


下载文件

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

源代码分发

此版本没有可用的源代码分发文件。请参阅生成分发存档的教程

构建的分发

odoo_addon_report_py3o-16.0.1.0.4-py3-none-any.whl (217.7 kB 查看哈希值)

上传时间 Python 3

支持