v 15.0 Third Party 2445
Download for v 15.0 Deploy on Odoo.sh
Lines of code 413
Technical Name ks_binary_file_preview
Also available in version v 13.0 v 14.0 v 12.0
You bought this module and need support? Click here!
Lines of code 413
Technical Name ks_binary_file_preview
Also available in version v 13.0 v 14.0 v 12.0
Community Enterprise

Document Preview

Document Preview saves time and storage of users as it allows them to preview the document without downloading it. This app can be used in all Odoo modules to display documents like PDF, image, video file format.

Hot Features

  • Supports Multiple Files such as images, PDFs, and Videos
  • Preview Files from Anywhere Inside the Odoo Module



With the Odoo Module, no preview is available.


Document Preview offers a range of file formats such as image, PDF, audio, and Video to be displayed as a Preview.


The user had to view the preview in the Attachment (Technical) module.


This app lets the user preview in all Odoo modules.

Working of app


Extensively Tested on Odoo Vanilla with Ubuntu OS
  • Works with custom binary fields.
  • Support Multiple File Formats.
    • - File formats such as pdf, jpeg, gif, png, mp4.
  • arrow If you’re adding the Binary Field to a new code or already working code, then add attachmnt=True in python model wherever you wish to add the field.
  • arrow A button like ( ) will be visible beside all binary fields like shown in the image.

Frequently Asked Question

Is this app compatible with Odoo Enterprise?
Yes, our app works with Odoo Enterprise as well as Community.
Does the preview works with custom binary fields?
Yes, but you have to make the field Attachment = True.
What type of files does it support for preview?
It supports most of the file formats like pdf, jpeg, gif, png, mp4.
Need some customization in this app, whom to contact?
Please drop email at sales@ksolves.com or raise a ticket through Odoo store itself.
Will it preview if the field is modified (attachment=True changed to attachment=False)
You will be presented with the preview of last file that you have uploaded (when attachment=True).

Our Releases

04th September, 2020

Latest Release 1.0.1

Enhancement - Added Alerts if file can't be previewed.

Ksolves Odoo Services

Odoo Implementation
Odoo Community Apps
Odoo Support & Maintenance
Odoo Customization
Odoo Integration Services
Odoo Developer Outsourcing
+91 120-4299799‬

Please log in to comment on this module

  • The author can leave a single reply to each comment.
  • This section is meant to ask simple questions or leave a rating. Every report of a problem experienced while using the module should be addressed to the author directly (refer to the following point).
  • If you want to start a discussion with the author, please use the developer contact information. They can usually be found in the description.
Please choose a rating from 1 to 5 for this module.
There are no ratings yet!
on 12/29/21, 8:53 AM Author

Hi Juan,

We have checked your concern and we will provide the fixes for the same in our next release and update you accordingly.

For any other concerns or queries, please feel free to reach out to us odoo.helpdesk@ksolves.in.


Team Ksolves !

Juan Jose Samayoa
on 12/20/21, 2:54 PM
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/tools/cache.py", line 85, in lookup
    r = d[key]
  File "/usr/lib/python3/dist-packages/odoo/tools/func.py", line 71, in wrapper
    return func(self, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/tools/lru.py", line 34, in __getitem__
    a = self.d[obj]
KeyError: ('ir.model.data', <function IrModelData._xmlid_lookup at 0x7f55491a0430>, 'web.assets_backend')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 680, in _tag_root
  File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 658, in _tag_template
    return self._tag_record(record)
  File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 567, in _tag_record
    f_val = self.id_get(f_ref)
  File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 663, in id_get
    res = self.model_id_get(id_str, raise_if_not_found)
  File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 669, in model_id_get
    return self.env['ir.model.data']._xmlid_to_res_model_res_id(id_str, raise_if_not_found=raise_if_not_found)
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_model.py", line 1935, in _xmlid_to_res_model_res_id
    return self._xmlid_lookup(xmlid)[1:3]
  File "<decorator-gen-35>", line 2, in _xmlid_lookup
  File "/usr/lib/python3/dist-packages/odoo/tools/cache.py", line 90, in lookup
    value = d[key] = self.method(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_model.py", line 1928, in _xmlid_lookup
    raise ValueError('External ID not found in the system: %s' % xmlid)
ValueError: External ID not found in the system: web.assets_backend
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_http.py", line 237, in _dispatch
    result = request.dispatch()
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 687, in dispatch
    result = self._call_function(**self.params)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 359, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 94, in wrapper
    return f(dbname, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 348, in checked_call
    result = self.endpoint(*a, **kw)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 916, in __call__
    return self.method(*args, **kw)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 535, in response_wrap
    response = f(*args, **kw)
  File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1339, in call_button
    action = self._call_kw(model, method, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/main.py", line 1327, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/api.py", line 464, in call_kw
    result = _call_kw_multi(method, model, args, kwargs)
  File "/usr/lib/python3/dist-packages/odoo/api.py", line 451, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "<decorator-gen-74>", line 2, in button_immediate_install
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 74, in check_and_log
    return method(self, *args, **kwargs)
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 483, in button_immediate_install
    return self._button_immediate_function(type(self).button_install)
  File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_module.py", line 600, in _button_immediate_function
    registry = modules.registry.Registry.new(self._cr.dbname, update_module=True)
  File "/usr/lib/python3/dist-packages/odoo/modules/registry.py", line 87, in new
    odoo.modules.load_modules(registry, force_demo, status, update_module)
  File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 474, in load_modules
    processed_modules += load_marked_modules(cr, graph,
  File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 363, in load_marked_modules
    loaded, processed = load_module_graph(
  File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 222, in load_module_graph
    load_data(cr, idref, mode, kind='data', package=package)
  File "/usr/lib/python3/dist-packages/odoo/modules/loading.py", line 69, in load_data
    tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind)
  File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 745, in convert_file
    convert_xml_import(cr, module, fp, idref, mode, noupdate)
  File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 811, in convert_xml_import
  File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 731, in parse
  File "/usr/lib/python3/dist-packages/odoo/tools/convert.py", line 693, in _tag_root
    raise ParseError('while parsing %s:%s, somewhere inside\n%s' % (
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 643, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/usr/lib/python3/dist-packages/odoo/http.py", line 301, in _handle_exception
    raise exception.with_traceback(None) from new_cause
odoo.tools.convert.ParseError: while parsing None:3, somewhere inside
<data name="board assets" inherit_id="web.assets_backend">
        <xpath expr="." position="inside">
            <script type="text/javascript" src="/ks_binary_file_preview/static/src/js/ks_binary_preview.js"/>
Re: error
on 12/21/21, 12:47 AM Author

Hi Juan,

We have received your query. Kindly mark your query to sales@ksolves.com We will check with our tech development team on the possible solutions.


Team Ksolves