Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ addon | version | maintainers | summary
[report_partner_address](report_partner_address/) | 18.0.1.0.0 | <a href='https://github.com/yostashiro'><img src='https://github.com/yostashiro.png' width='32' height='32' style='border-radius:50%;' alt='yostashiro'/></a> <a href='https://github.com/aungkokolin1997'><img src='https://github.com/aungkokolin1997.png' width='32' height='32' style='border-radius:50%;' alt='aungkokolin1997'/></a> | Translatable partner address details for reports and portal
[report_pdf_form](report_pdf_form/) | 18.0.1.0.0 | <a href='https://github.com/grindtildeath'><img src='https://github.com/grindtildeath.png' width='32' height='32' style='border-radius:50%;' alt='grindtildeath'/></a> | Fill custom PDF form reports
[report_pdf_zip_download](report_pdf_zip_download/) | 18.0.1.0.0 | | Report PDF ZIP Download
[report_py3o](report_py3o/) | 18.0.1.0.2 | | Reporting engine based on Libreoffice (ODT -> ODT, ODT -> PDF, ODT -> DOC, ODT -> DOCX, ODS -> ODS, etc.)
[report_positioned_image](report_positioned_image/) | 18.0.1.0.0 | | Add positioned images to PDF reports.
[report_py3o](report_py3o/) | 18.0.1.0.3 | | Reporting engine based on Libreoffice (ODT -> ODT, ODT -> PDF, ODT -> DOC, ODT -> DOCX, ODS -> ODS, etc.)
[report_py3o_fusion_server](report_py3o_fusion_server/) | 18.0.1.0.0 | | Let the fusion server handle format conversion.
[report_qr](report_qr/) | 18.0.1.0.0 | | Web QR Manager
[report_qweb_element_page_visibility](report_qweb_element_page_visibility/) | 18.0.1.0.0 | | Report Qweb Element Page Visibility
Expand Down
136 changes: 136 additions & 0 deletions report_positioned_image/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association

=======================
Report Positioned Image
=======================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:7492b81c95084617eacd2468003a6783881838c17e7ef230b84bf4d6733dc0e3
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Freporting--engine-lightgray.png?logo=github
:target: https://github.com/OCA/reporting-engine/tree/18.0/report_positioned_image
:alt: OCA/reporting-engine
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/reporting-engine-18-0/reporting-engine-18-0-report_positioned_image
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/reporting-engine&target_branch=18.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This module allows you to add positioned images (such as watermarks,
logos, or stamps) to PDF reports. Images can be precisely positioned
using millimeter coordinates (top, left) and you can control whether
they appear on all pages or only the first page.

The module supports two types of images:

- *Company-level Images*: Define images at the company level that can be
included in reports by enabling the *Include Company Images* option
- *Report-specific Images*: Configure specific images for individual
reports, filtered by company context and always shown when configured

Images can be assigned to a specific company or left as shared records
(without company assignment) for use across multiple companies

**Table of contents**

.. contents::
:local:

Configuration
=============

To configure company-level images:

1. Go to *Settings / Companies*
2. Open your company record
3. Navigate to the *Report Images* tab
4. Add images with position settings:

- Upload an image - width defaults to 50mm and height is
automatically calculated to maintain the original aspect ratio
- *Top (mm)*: Distance from the top of the page
- *Left (mm)*: Distance from the left edge of the page
- *Width (mm)*: Width of the image (changing this auto-adjusts
height)
- *Height (mm)*: Height of the image (changing this auto-adjusts
width)
- *Respect Image Ratio*: When enabled (default), changing width or
height automatically adjusts the other dimension to maintain aspect
ratio. Uncheck for manual control of both dimensions.
- *First Page Only*: Check to show only on the first page
- *Company*: Automatically set to the current company when creating
from the company form. To create shared images, leave empty.

To configure report-specific images:

1. Go to *Settings / Technical / Actions / Reports*
2. Open the report you want to customize
3. Navigate to the *Report Images* tab
4. Check *Include Company Images* if you want to show company-level
images in addition to report-specific images
5. Add report-specific images in the list with the same position
settings as above

**Note**: By default, images maintain their aspect ratio. When you
upload an image, it's automatically sized to 50mm width with
proportional height. You can then adjust either dimension and the other
will update automatically to prevent distortion.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/reporting-engine/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/reporting-engine/issues/new?body=module:%20report_positioned_image%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
-------

* Quartile

Contributors
------------

- Quartile <https://www.quartile.co>

- Tatsuki Kanda
- Aung Ko Ko Lin

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

This module is part of the `OCA/reporting-engine <https://github.com/OCA/reporting-engine/tree/18.0/report_positioned_image>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions report_positioned_image/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
20 changes: 20 additions & 0 deletions report_positioned_image/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Copyright 2026 Quartile (https://www.quartile.co)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Report Positioned Image",
"summary": "Add positioned images to PDF reports.",
"version": "18.0.1.0.0",
"category": "Reporting",
"author": "Quartile, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/reporting-engine",
"license": "AGPL-3",
"depends": ["web", "report_qweb_element_page_visibility"],
"data": [
"security/ir.model.access.csv",
"security/report_positioned_image_security.xml",
"views/report_positioned_image_views.xml",
"views/res_company_views.xml",
"views/ir_actions_report_views.xml",
],
"installable": True,
}
191 changes: 191 additions & 0 deletions report_positioned_image/i18n/report_positioned_image.pot
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * report_positioned_image
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: report_positioned_image
#: model:ir.model,name:report_positioned_image.model_res_company
msgid "Companies"
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_report_positioned_image__company_id
msgid "Company"
msgstr ""

#. module: report_positioned_image
#. odoo-python
#: code:addons/report_positioned_image/models/report_positioned_image.py:0
msgid "Company Assignment"
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_res_company__report_positioned_image_ids
msgid "Company Images"
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_report_positioned_image__create_uid
msgid "Created by"
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_report_positioned_image__create_date
msgid "Created on"
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_report_positioned_image__display_name
msgid "Display Name"
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_report_positioned_image__first_page_only
msgid "First Page Only"
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_report_positioned_image__height
#: model_terms:ir.ui.view,arch_db:report_positioned_image.view_act_report_form_positioned_image
#: model_terms:ir.ui.view,arch_db:report_positioned_image.view_company_form_positioned_image
msgid "Height (mm)"
msgstr ""

#. module: report_positioned_image
#. odoo-python
#: code:addons/report_positioned_image/models/report_positioned_image.py:0
msgid "Height must be greater than zero."
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_report_positioned_image__id
msgid "ID"
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,help:report_positioned_image.field_ir_actions_report__include_company_images
#: model:ir.model.fields,help:report_positioned_image.field_report_pdf_form__include_company_images
msgid ""
"If checked, company-level images will be shown in addition to report-"
"specific images."
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_report_positioned_image__image
msgid "Image"
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_ir_actions_report__include_company_images
#: model:ir.model.fields,field_description:report_positioned_image.field_report_pdf_form__include_company_images
msgid "Include Company Images"
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_report_positioned_image__write_uid
msgid "Last Updated by"
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_report_positioned_image__write_date
msgid "Last Updated on"
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,help:report_positioned_image.field_report_positioned_image__company_id
msgid ""
"Leave empty to apply to all companies. Set a specific company to restrict "
"this image to that company only."
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_report_positioned_image__pos_left
#: model_terms:ir.ui.view,arch_db:report_positioned_image.view_act_report_form_positioned_image
#: model_terms:ir.ui.view,arch_db:report_positioned_image.view_company_form_positioned_image
msgid "Left (mm)"
msgstr ""

#. module: report_positioned_image
#. odoo-python
#: code:addons/report_positioned_image/models/report_positioned_image.py:0
msgid "Left position must be a positive value."
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_report_positioned_image__name
msgid "Name"
msgstr ""

#. module: report_positioned_image
#: model:ir.model,name:report_positioned_image.model_ir_actions_report
msgid "Report Action"
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_ir_actions_report__report_positioned_image_ids
#: model:ir.model.fields,field_description:report_positioned_image.field_report_pdf_form__report_positioned_image_ids
#: model_terms:ir.ui.view,arch_db:report_positioned_image.view_act_report_form_positioned_image
#: model_terms:ir.ui.view,arch_db:report_positioned_image.view_company_form_positioned_image
msgid "Report Images"
msgstr ""

#. module: report_positioned_image
#: model:ir.model,name:report_positioned_image.model_report_positioned_image
msgid "Report Positioned Image"
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_report_positioned_image__respect_image_ratio
msgid "Respect Image Ratio"
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_report_positioned_image__pos_top
#: model_terms:ir.ui.view,arch_db:report_positioned_image.view_act_report_form_positioned_image
#: model_terms:ir.ui.view,arch_db:report_positioned_image.view_company_form_positioned_image
msgid "Top (mm)"
msgstr ""

#. module: report_positioned_image
#. odoo-python
#: code:addons/report_positioned_image/models/report_positioned_image.py:0
msgid "Top position must be a positive value."
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,help:report_positioned_image.field_report_positioned_image__respect_image_ratio
msgid ""
"When enabled, changing width or height will automatically adjust the other "
"dimension to maintain the original image aspect ratio."
msgstr ""

#. module: report_positioned_image
#: model:ir.model.fields,field_description:report_positioned_image.field_report_positioned_image__width
#: model_terms:ir.ui.view,arch_db:report_positioned_image.view_act_report_form_positioned_image
#: model_terms:ir.ui.view,arch_db:report_positioned_image.view_company_form_positioned_image
msgid "Width (mm)"
msgstr ""

#. module: report_positioned_image
#. odoo-python
#: code:addons/report_positioned_image/models/report_positioned_image.py:0
msgid "Width must be greater than zero."
msgstr ""

#. module: report_positioned_image
#. odoo-python
#: code:addons/report_positioned_image/models/report_positioned_image.py:0
msgid ""
"You cannot assign this image to a different company. Please use the "
"dedicated wizard to assign images to other companies."
msgstr ""
3 changes: 3 additions & 0 deletions report_positioned_image/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from . import ir_actions_report
from . import report_positioned_image
from . import res_company
Loading
Loading