How to use custom fonts in RML reports?

To print report in Chinese or Comic Sans MS

Some languages (e.g. Chinese) needs different charset not supported by classic fonts (or you just want Comic Sans MS in your reports). Good news, you can use custom TTF fonts. For Chinese, we make it easier for Sun-ExtA but you can use any TTF font,

Version 7.0


The list of available fonts is hardcoded in CustomTTFontsvariable in openerp/report/render/rml2pdf/ If you want to add another font than DejaVu Sans, Liberation Serif, FreeMono or Sun-ExtA, you will need to modify the source file to add the font in the format:

('family name', 'font name', 'ttf file name', 'mode')
  • family name: the name of font interpreted by reportlab (e.g. check with FontForge Element > Font Info)
  • font name: what should be put in your rml file. Family name can common between several fonts while font name should be unique (e.g. "DejaVu Sans" vs "DejaVu Sans Bold")
  • file name: just the name of your ttf file, not the full patch
  • mode: one between normal, italic, oblique, bold, bolditalic, bold italic, boldoblique, bold oblique or all

Careful: the font and file names are case sensitive !!!

To be discovered by odoo, your font should be in one of these folders

  • the search folders defined in reportlab library, variable TTFSearchPath (e.g.~/.fonts on linux, check /usr/lib/python2.7/site-packages/reportlab/ for full list)

When rendering a report, check your logs (debug mode helps) for warning or info message about fonts not found. Restarting your odoo server after installing a font may help.

To use your font on every report modify the RML Header of your company (Settings > Companies > Header/Footer) and change and locate the fontName="DejaVu Sans" or setFont name="DejaVu Sans" to replace by the font name you wish to use.

This will only modify global settings, if you have font specified inside the rml reports, you will also need to modify these one !


Version 8.0

No more needed to modify python files ! Well actually no more need to do RML reports in v8 but still possible.

You still need to install the custom font in one of the searched folder (see above).

Go to Settings > Companies > Report Configuration and hit the reload fonts button to populate the many2one (by default empty). odoo will scan all the fonts installed on your system. Selecting one will modify the company headers to use it globally.


Need more info?

This documentation page has been extracted from the Q&A section where you can discuss it and get feedback.
Related question