Merge lp:~kifcaliph/openobject-server/openobject-server into lp:openobject-server

Proposed by kifcaliph
Status: Needs review
Proposed branch: lp:~kifcaliph/openobject-server/openobject-server
Merge into: lp:openobject-server
Diff against target: 111 lines (+71/-2)
2 files modified
openerp/report/render/rml2pdf/__init__.py (+35/-1)
openerp/report/render/rml2pdf/trml2pdf.py (+36/-1)
To merge this branch: bzr merge lp:~kifcaliph/openobject-server/openobject-server
Reviewer Review Type Date Requested Status
Olivier Dony (Odoo) Pending
Review via email: mp+101195@code.launchpad.net

Description of the change

this is some modification to enable RTL languages to work with Openerp in PDF reports, without this modifications RTL languages may appear something like this "prenepO" for word Openerp.

To post a comment you must log in.

Unmerged revisions

4129. By kifcaliph <kifcaliph@kifcaliph>

Enabling RTL languages to work

4128. By kifcaliph

These modification to make Openerp to expor pdf documents for RTL languages like Arabic

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'openerp/report/render/rml2pdf/__init__.py'
--- openerp/report/render/rml2pdf/__init__.py 2011-11-22 08:58:48 +0000
+++ openerp/report/render/rml2pdf/__init__.py 2012-04-08 03:03:21 +0000
@@ -19,9 +19,43 @@
19#19#
20##############################################################################20##############################################################################
2121
22
23# file location /openerp/report/render/rml2pdf
24
25
26import os, stat
27from reportlab import rl_config
28from reportlab.pdfbase import pdfmetrics
29from reportlab.pdfbase import ttfonts
30from reportlab.lib.fonts import addMapping
31
32def rl_isreg(filename, dirname):
33 try:
34 st = os.stat(os.path.join(dirname, filename))
35 except OSError, reason:
36 if reason.errno == 2:
37 return False
38 raise
39 return stat.S_ISREG(st.st_mode) or stat.S_ISLNK(st.st_mode)
40
41for dirname in rl_config.TTFSearchPath:
42 for root, dirs, files in os.walk(dirname): #@UnusedVariable
43 for file in [x for x in files
44 if x.lower().endswith('.ttf') and rl_isreg(x, root)
45 ]:
46 filename = os.path.join(root, file)
47 try:
48 face = ttfonts.TTFontFace(filename)
49 face.extractInfo(1)
50 pdfmetrics.registerFont(ttfonts.TTFont(face.name, filename, asciiReadable=0))
51 addMapping(face.familyName, face.bold, face.italic, face.name)
52 except:
53 pass
54
55
22from trml2pdf import parseString, parseNode56from trml2pdf import parseString, parseNode
2357
24#.apidoc title: RML to PDF engine58#.apidoc title: RML to PDF engine
2559
2660
27# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:61# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
28\ No newline at end of file62\ No newline at end of file
2963
=== modified file 'openerp/report/render/rml2pdf/trml2pdf.py'
--- openerp/report/render/rml2pdf/trml2pdf.py 2012-02-08 01:36:17 +0000
+++ openerp/report/render/rml2pdf/trml2pdf.py 2012-04-08 03:03:21 +0000
@@ -624,7 +624,7 @@
624 if not n.tag == 'bullet':624 if not n.tag == 'bullet':
625 txt_n.text = utils.xml2str(self._textual(n))625 txt_n.text = utils.xml2str(self._textual(n))
626 txt_n.tail = n.tail and utils.xml2str(utils._process_text(self, n.tail.replace('\n',''))) or ''626 txt_n.tail = n.tail and utils.xml2str(utils._process_text(self, n.tail.replace('\n',''))) or ''
627 rc1 += etree.tostring(txt_n)627 rc1 += etree.tostring(txt_n, encoding = unicode)
628 return rc1628 return rc1
629629
630 def _table(self, node):630 def _table(self, node):
@@ -968,7 +968,41 @@
968 fis.append(PageCount())968 fis.append(PageCount())
969 self.doc_tmpl.build(fis)969 self.doc_tmpl.build(fis)
970970
971def changeFonts(data):
972 fontmap = {
973 'Times-Roman': 'DejaVuSerif',
974 'Times-BoldItalic': 'DejaVuSerif-BoldItalic',
975 'Times-Bold': 'DejaVuSerif-Bold',
976 'Times-Italic': 'DejaVuSerif-Italic',
977
978 'Helvetica': 'DejaVuSans',
979 'Helvetica-BoldItalic': 'DejaVuSans-BoldOblique',
980 'Helvetica-Bold': 'DejaVuSans-Bold',
981 'Helvetica-Italic': 'DejaVuSans-Oblique',
982
983 'Courier': 'DejaVuSansMono',
984 'Courier-Bold': 'DejaVuSansMono-Bold',
985 'Courier-BoldItalic': 'DejaVuSansMono-BoldOblique',
986 'Courier-Italic': 'DejaVuSansMono-Oblique',
987
988 'Helvetica-ExtraLight': 'DejaVuSans-ExtraLight',
989
990 'TimesCondensed-Roman': 'DejaVuSerifCondensed',
991 'TimesCondensed-BoldItalic': 'DejaVuSerifCondensed-BoldItalic',
992 'TimesCondensed-Bold': 'DejaVuSerifCondensed-Bold',
993 'TimesCondensed-Italic': 'DejaVuSerifCondensed-Italic',
994
995 'HelveticaCondensed': 'DejaVuSansCondensed',
996 'HelveticaCondensed-BoldItalic': 'DejaVuSansCondensed-BoldOblique',
997 'HelveticaCondensed-Bold': 'DejaVuSansCondensed-Bold',
998 'HelveticaCondensed-Italic': 'DejaVuSansCondensed-Oblique',
999 }
1000 for old, new in fontmap.iteritems():
1001 data = data.replace('"'+old+'"', '"'+new+'"')
1002 return data
1003
971def parseNode(rml, localcontext=None, fout=None, images=None, path='.', title=None):1004def parseNode(rml, localcontext=None, fout=None, images=None, path='.', title=None):
1005 rml = changeFonts(rml)
972 node = etree.XML(rml)1006 node = etree.XML(rml)
973 r = _rml_doc(node, localcontext, images, path, title=title)1007 r = _rml_doc(node, localcontext, images, path, title=title)
974 #try to override some font mappings1008 #try to override some font mappings
@@ -986,6 +1020,7 @@
986 return fp.getvalue()1020 return fp.getvalue()
9871021
988def parseString(rml, localcontext=None, fout=None, images=None, path='.', title=None):1022def parseString(rml, localcontext=None, fout=None, images=None, path='.', title=None):
1023 rml = changeFonts(rml)
989 node = etree.XML(rml)1024 node = etree.XML(rml)
990 r = _rml_doc(node, localcontext, images, path, title=title)1025 r = _rml_doc(node, localcontext, images, path, title=title)
9911026