[MIG] report_qweb_pdf_watermark

pull/680/head
Stefan Rijnhart 2017-04-22 14:39:22 +02:00 committed by bosd
parent 7822e61f1d
commit 81a5c9b0e0
7 changed files with 48 additions and 63 deletions

View File

@ -6,9 +6,7 @@
Pdf watermark
=============
This module was written to add watermarks (backgrounds) to PDF reports.
This is necessary because of the way wkhtmltopdf handles headers and footers, in the current versions if quite impossible to have a background for the complete page.
This module was written to add watermarks (backgrounds) to PDF reports. Because of the way wkhtmltopdf handles headers and footers in the current versions, it is quite impossible to have a background for the complete page using HTML and CSS. That is why this module inserts the image at the PDF level.
Usage
=====
@ -17,7 +15,7 @@ To use this module, you need to:
#. go to your report
#. select a PDF or image to use as watermark. Note that resolutions and size must match, otherwise you'll have funny results
#. advanced users (members of group technical settings) can also fill in an expression that returns the data (base64 encoded) to be used as watermark
#. You can also fill in an expression that returns the data (base64 encoded) to be used as watermark
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
@ -43,6 +41,7 @@ Contributors
------------
* Holger Brunn <hbrunn@therp.nl>
* Stefan Rijnhart <stefan@opener.am>
Do not contact contributors directly about help with questions or problems concerning this addon, but use the `community mailing list <mailto:community@mail.odoo.com>`_ or the `appropriate specialized mailinglist <https://odoo-community.org/groups>`_ for help, and the bug tracker linked in `Bug Tracker`_ above for technical issues.

View File

@ -3,7 +3,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
"name": "Pdf watermark",
"version": "9.0.1.0.0",
"version": "10.0.1.0.0",
"author": "Therp BV,Odoo Community Association (OCA)",
"license": "AGPL-3",
"category": "Reporting",

View File

@ -1,30 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<report
id="demo_report"
string="Demo report"
model="res.users"
report_type="qweb-pdf"
name="report_qweb_pdf_watermark.demo_report_view"
file="report_qweb_pdf_watermark.demo_report_view"
paperformat="report.paperformat_euro"
<odoo>
<report
id="demo_report"
string="Demo report"
model="res.users"
report_type="qweb-pdf"
name="report_qweb_pdf_watermark.demo_report_view"
file="report_qweb_pdf_watermark.demo_report_view"
paperformat="report.paperformat_euro"
/>
<record id="demo_report" model="ir.actions.report.xml">
<field name="pdf_watermark_expression">docs[:1].company_id.logo</field>
</record>
<template id="demo_report_view">
<t t-call="report.html_container">
<t t-call="report.external_layout">
<div class="page">
<ul>
<li t-foreach="docs" t-as="doc">
<t t-esc="doc.name" />
</li>
</ul>
</div>
</t>
<record id="demo_report" model="ir.actions.report.xml">
<field name="pdf_watermark_expression">docs[:1].company_id.logo</field>
</record>
<template id="demo_report_view">
<t t-call="report.html_container">
<t t-call="report.external_layout">
<div class="page">
<ul>
<li t-foreach="docs" t-as="doc">
<t t-esc="doc.name" />
</li>
</ul>
</div>
</t>
</template>
</data>
</openerp>
</t>
</template>
</odoo>

View File

@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
# © 2016 Therp BV <http://therp.nl>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import fields, models
from odoo import fields, models
class IrActionsReportXml(models.Model):

View File

@ -7,32 +7,25 @@ from pyPdf import PdfFileWriter, PdfFileReader
from pyPdf.utils import PdfReadError
from PIL import Image
from StringIO import StringIO
from openerp import api, models, tools
from odoo import api, models, tools
logger = getLogger(__name__)
class Report(models.Model):
_inherit = 'report'
@api.v7
def get_pdf(
self, cr, uid, ids, report_name, html=None, data=None, context=None
):
# pylint: disable=R8110
# this override cannot be done in v8 api
@api.model
def get_pdf(self, docids, report_name, html=None, data=None):
result = super(Report, self).get_pdf(
cr, uid, ids, report_name, html=html, data=data,
context=context
)
report = self._get_report_from_name(cr, uid, report_name)
docids, report_name, html=html, data=data)
report = self._get_report_from_name(report_name)
watermark = None
if report.pdf_watermark:
watermark = b64decode(report.pdf_watermark)
else:
env = api.Environment(cr, uid, context)
watermark = tools.safe_eval(
report.pdf_watermark_expression or 'None',
dict(env=env, docs=env[report.model].browse(ids)),
dict(env=self.env, docs=self.env[report.model].browse(docids)),
)
if watermark:
watermark = b64decode(watermark)

View File

@ -22,11 +22,8 @@ class TestReportQwebPdfWatermark(TransactionCase):
self._test_report_images(3)
def _test_report_images(self, number):
pdf = self.registry['report'].get_pdf(
self.cr,
self.uid,
pdf = self.env['report'].get_pdf(
self.env['res.users'].search([]).ids,
'report_qweb_pdf_watermark.demo_report_view',
context={}
)
self.assertEqual(pdf.count('/Subtype /Image'), number)

View File

@ -1,15 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<record id="act_report_xml_view" model="ir.ui.view">
<field name="model">ir.actions.report.xml</field>
<field name="inherit_id" ref="base.act_report_xml_view" />
<field name="arch" type="xml">
<field name="attachment" position="after">
<field name="pdf_watermark" attrs="{'invisible': [('report_type', '!=', 'qweb-pdf')]}" />
<field name="pdf_watermark_expression" attrs="{'invisible': [('report_type', '!=', 'qweb-pdf')]}" groups="base.group_no_one" />
</field>
<odoo>
<record id="act_report_xml_view" model="ir.ui.view">
<field name="model">ir.actions.report.xml</field>
<field name="inherit_id" ref="base.act_report_xml_view" />
<field name="arch" type="xml">
<field name="attachment" position="after">
<field name="pdf_watermark" attrs="{'invisible': [('report_type', '!=', 'qweb-pdf')]}" />
<field name="pdf_watermark_expression" attrs="{'invisible': [('report_type', '!=', 'qweb-pdf')]}" groups="base.group_no_one" />
</field>
</record>
</data>
</openerp>
</field>
</record>
</odoo>