Skip to content

Commit

Permalink
[ADD] report_qweb_weasyprint_renderer
Browse files Browse the repository at this point in the history
fixes OCA#254
  • Loading branch information
hbrunn authored and legalsylvain committed Apr 25, 2023
1 parent 97857f0 commit 4d2dfd4
Show file tree
Hide file tree
Showing 20 changed files with 657 additions and 0 deletions.
Empty file.
3 changes: 3 additions & 0 deletions report_qweb_weasyprint_renderer/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Copyright 2018 Therp BV <https://therp.nl>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import models
25 changes: 25 additions & 0 deletions report_qweb_weasyprint_renderer/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Copyright 2018 Therp BV <https://therp.nl>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
"name": "Weasyprint QWEB renderer",
"version": "12.0.1.0.0",
"author": "Therp BV,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/reporting-engine",

"license": "AGPL-3",
"category": "Reporting",
"summary": "Use WeasyPrint to create PDFs",
"depends": [
'report_qweb_custom_renderer',
'web',
],
"demo": [
"demo/report.xml",
],
"data": [
'views/templates.xml',
],
"external_dependencies": {
'python': ['weasyprint'],
},
}
70 changes: 70 additions & 0 deletions report_qweb_weasyprint_renderer/demo/report.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<template id="view_demo_report_qweb">
<html>
<head>
<style type="text/css">
@page {
size: A4;
padding: 20px;
@top-center {
content: '<t t-esc="env.user.name" /> - ' string(title);
}
@bottom-center {
content: counter(page) ' of ' counter(pages);
}
}
h1 {
string-set: title content();
page-break-before: always;
}
h1:first-of-type {
page-break-before: avoid;
}
.desc {
white-space: pre-line;
font-family: monospace;
}
.index {
list-style: none;
padding-left: 0em;
}
.index li a {
text-decoration: none;
color: inherit;
}
.index li a::after {
content: target-counter(attr(href), page);
float: right;
}
.img {
margin: .1em;
float: right;
}
</style>
</head>
<body>
<h1>Index</h1>
<ul class="index">
<li t-foreach="docs" t-as="this">
<a t-attf-href="#chapter{{this.id}}" t-esc="this.shortdesc" />
</li>
</ul>
<t t-foreach="docs" t-as="this">
<h1 t-attf-id="chapter{{this.id}}" t-esc="this.shortdesc" />
<img class="img" t-attf-src="data:img/*;base64,{{this.icon_image}}" />
<div class="desc" t-esc="this.description" />
</t>
</body>
</html>
</template>
<report id="demo_report"
string="WeasyPrint demo report"
model="ir.module.module"
name="report_qweb_weasyprint_renderer.view_demo_report_qweb"
report_type="qweb-pdf"
/>
<record id="demo_report" model="ir.actions.report">
<field name="qweb_pdf_engine">weasyprint</field>
</record>
</odoo>
3 changes: 3 additions & 0 deletions report_qweb_weasyprint_renderer/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Copyright 2018 Therp BV <https://therp.nl>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from . import ir_actions_report
32 changes: 32 additions & 0 deletions report_qweb_weasyprint_renderer/models/ir_actions_report.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Copyright 2018 Therp BV <https://therp.nl>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
try:
from weasyprint import HTML
except ImportError:
HTML = None


class IrActionsReport(models.Model):
_inherit = 'ir.actions.report'

qweb_pdf_engine = fields.Selection(
selection_add=[('weasyprint', 'WeasyPrint')],
)

@api.multi
def _render_qweb_pdf_weasyprint(self, res_ids=None, data=None):
data = data or {}
data['enable_editor'] = False,
context = dict(self.env.context)
context['qweb_pdf_engine'] = 'weasyprint'

html = self.with_context(**context).render_qweb_html(
res_ids, data=data
)[0]
return HTML(
string=html,
# TODO: pass a custom url fetcher to never actually use the port
base_url=self.env['ir.config_parameter'].get_param('report.url') or
self.env['ir.config_parameter'].get_param('web.base.url'),
).write_pdf(), 'pdf'
1 change: 1 addition & 0 deletions report_qweb_weasyprint_renderer/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* Holger Brunn <[email protected]>
2 changes: 2 additions & 0 deletions report_qweb_weasyprint_renderer/readme/CREDITS.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.svg>`_.
* `weasyprint <https://weasyprint.org>`_
1 change: 1 addition & 0 deletions report_qweb_weasyprint_renderer/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This module allows you to use weasyprint to render PDFs, which allows for more print related HTML features than using Odoo's standard wkhtmltopdf.
3 changes: 3 additions & 0 deletions report_qweb_weasyprint_renderer/readme/ROADMAP.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
* add a compatibility layer to replace wkhtmltopdf
* support paper formats
* add some sensible templates for weasyprint specific internal and external layouts
5 changes: 5 additions & 0 deletions report_qweb_weasyprint_renderer/readme/USAGE.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
To use this module, you need to set ``qweb_pdf_engine`` to ``weasyprint``::

<record id="demo_report" model="ir.actions.report">
<field name="qweb_pdf_engine">weasyprint</field>
</record>
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 4d2dfd4

Please sign in to comment.