基于libreoffice的报表引擎(odt->odt,odt->pdf,odt->doc,odt->docx,ods->ods等)

odoo12-addon-report-py3o的Python项目详细描述


BetaLicense: AGPL-3OCA/reporting-engineTranslate me on WeblateTry me on Runbot

py3o报告引擎是基于Libreoffice

  • 报告由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)配置文档,用户就可以在odoo生成文档后使用libreoffice(或word)对其进行修改。
  • 易于开发ods格式的电子表格报告(可以输出xls)。

这个模块report_py3o是py3o报告引擎的基本模块。如果单独使用,它将为每个odt到pdf(或odt到docx,…)文档转换生成libreoffice进程。这是一个缓慢的问题,如果您有大量的报告要从odt转换成另一种格式,这可能会成为一个问题。在这种情况下,您应该考虑additionnal模块report_py3o_fusion_server,它设计用于libreoffice守护进程。有了report_py3o_fusion_server,技术环境的设置更加复杂,因为您必须安装附加的软件组件并运行两个守护程序,但是您有更好的性能,并且可以在odoo中配置libreoffice pdf导出选项(允许生成pdf表单、pdf/a文档,密码保护的PDF、带水印的PDF等)。

这个报告引擎是Aeroo的替代品:这两个报告引擎有相似的特性,但它们的实现完全不同。你不能使用Aeroo模板作为替换,但是你必须改变一些细节。

目录

Installation

安装所需的python libs:

pip install py3o.template
pip install py3o.formats

要允许将odt或ods报告转换为其他格式(pdf、doc、docx等),请安装libreoffice:

apt-get --no-install-recommends install libreoffice

Configuration

例如,要用自定义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模块的名称。在本例中,invoice odt文件位于my_custom_module_base/report/account_invoice.odt中。

也可以引用位于 奥多服务器。在这种情况下,必须让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>

Configuration parameters

py3o.转换指令
用于运行转换的命令,默认为libreoffice。如果更改此项,则此处设置的任何内容都必须接受参数--headless--convert-to $ext $file,并将结果文件放入扩展名为$ext$file目录中。命令将在$file目录中启动。

Usage

模板语言是extensively documented,这些记录在libreoffice中公开为objects,您还可以对其调用函数。

Available functions and objects

用户
浏览当前用户的记录
语言
用户公司的语言为字符串(ISO代码)
b64解码
base64.b64decode
格式化多行值(字符串)
为多行字段生成等价于<br/>&nbsp;的odf(odf在内部是xml,否则将跳过这些字段)
HTML清理(字符串)
清理HTML字符串
时间
python的{tt10}$模块
显示地址(合作伙伴)
返回合作伙伴地址的格式化字符串
o_format_lang(值,lang_code=false,digits=none,grouping=true,monetary=false,dp=false,currency_obj=false,no_break_space=true)
根据上下文语言和时区返回格式化的数值或货币值
o_format_date(值,lang_code=false,date_format=false)
根据上下文语言和时区返回格式化的日期或时间值

Sample report templates

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

Known issues / Roadmap

  • 生成条形码?
  • 在演示文件中添加更详细的示例以展示功能
  • 添加迁移指南Aeroo->;PY3O

Bug Tracker

GitHub Issues上跟踪错误。 如果出现问题,请检查是否已报告您的问题。 如果你先发现了它,请提供详细的 feedback

不要就技术问题直接与贡献者联系。

Credits

Authors

  • XCG咨询
  • Acsone公司/内华达州

Contributors

Maintainers

此模块由OCA维护。

Odoo Community Association

oca,或odoo社区协会,是一个非营利性组织 任务是支持odoo特性和 促进其广泛应用。

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

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java持久性找不到类定义错误和外部JAR问题   java在我的例子中,限制访问html管理页面的最佳方式是什么?   java哪里可以下载JDK 1.6u20 64位?   多线程java:JVM是否更改了线程优先级(隐式)   java当我改变值时,如何自动增加媒体播放器的音量   Android 2.2 SDK/JAVA通过HttpUrlConnection上传文件/发布参数时出错   java比较保存的实体   java在REST Assured中,如何使用参数映射?   java生产者/消费者线程不会给出结果   将java控制台附加到文件   eclipse如何在java应用程序上放置图标?   java Try catch in switch语句退出选项   Junit中的java扩展ParentRunner   java datanucleus jdo 3.1.2迁移到4。十、   pdf如何使用PDFBOX 2创建段落。JAVA中的X   java使安卓 listview布局可滚动   使用serenity BDD的java Appium Android switch应用程序(本机和chrome)   在java REST中解析JSON参数时出错