Public release from ruodoo-project: 19.0 - 2026-05-10 21:19:01 UTC

This commit is contained in:
CI Publish Bot
2026-05-10 21:19:11 +00:00
commit cbf9e6e6d6
1213 changed files with 183945 additions and 0 deletions

View File

@ -0,0 +1,23 @@
# Report WeasyPrint
Adds WeasyPrint PDF rendering support to Odoo PDF reports.
## Requirements
System packages (Debian/Ubuntu example):
```bash
sudo apt install -y \
libcairo2 libpango-1.0-0 libpangocairo-1.0-0 \
libgdk-pixbuf2.0-0 libffi-dev shared-mime-info \
fonts-dejavu-core fonts-liberation
```
Python:
```
pip3 install WeasyPrint>=66.0
```
## Usage
Enable *Render with WeasyPrint* on any report (Settings → Technical → Reports).

View File

@ -0,0 +1 @@
from . import models

View File

@ -0,0 +1,16 @@
{
"name": "Report WeasyPrint",
"summary": "Рендер пдф документов через WeasyPrint вместо wkhtmltopdf",
"version": "19.0.1.0.0",
"category": "Reporting",
"author": "Mk.lab",
"license": "LGPL-3",
"depends": ["base", "web"],
"data": [
"views/ir_actions_report_views.xml",
],
"external_dependencies": {
"python": ["weasyprint"],
},
"installable": True,
}

View File

@ -0,0 +1 @@
from . import ir_actions_report_weasy

View File

@ -0,0 +1,78 @@
import logging
from odoo import api, fields, models
_logger = logging.getLogger(__name__)
try:
from weasyprint import HTML
from weasyprint.text.fonts import FontConfiguration
except Exception as e:
HTML = None
FontConfiguration = None
_logger.warning("WeasyPrint not available: %s", e)
class IrActionsReport(models.Model):
_inherit = "ir.actions.report"
use_weasyprint = fields.Boolean(
string="Render with WeasyPrint",
help="Render this PDF report using WeasyPrint instead of wkhtmltopdf."
)
def _weasyprint_enabled_for(self, report):
if not (HTML and FontConfiguration and report):
return False
ctx = self.env.context
if ctx.get("report_force_wkhtml"):
return False
if ctx.get("report_force_weasy"):
return True
return bool(report.use_weasyprint)
@api.model
def _run_wkhtmltopdf(
self,
bodies,
report_ref=False,
header=None,
footer=None,
landscape=False,
specific_paperformat_args=None,
set_viewport_size=False,
):
report = None
if report_ref:
try:
report = self._get_report(report_ref)
except Exception:
report = None
if not self._weasyprint_enabled_for(report):
return super()._run_wkhtmltopdf(
bodies,
report_ref=report_ref,
header=header,
footer=footer,
landscape=landscape,
specific_paperformat_args=specific_paperformat_args,
set_viewport_size=set_viewport_size,
)
html = "".join(bodies)
base_url = (
self.env["ir.config_parameter"].sudo().get_param("report.url")
or self.env["ir.config_parameter"].sudo().get_param("web.base.url")
or ""
)
font_config = FontConfiguration()
pdf_bytes = HTML(
string=html,
base_url=base_url,
).write_pdf(font_config=font_config)
return pdf_bytes

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_ir_actions_report_form_weasy" model="ir.ui.view">
<field name="name">ir.actions.report.form.weasyprint</field>
<field name="model">ir.actions.report</field>
<field name="inherit_id" ref="base.act_report_xml_view"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='report_type']" position="after">
<field name="use_weasyprint"/>
</xpath>
</field>
</record>
</odoo>