如何使 RML Reports 能够打印汉字?
- 确保您有中文字体(Simsun、Simhei、WenQuanYiZhenHei)
- 将您的字体嵌入到 RML 库和设置中,或者我们可能会说“注册您要在 RML 中使用的字体”</li>
- 更改 RML 报告中的字体名称(例如:slow_moving_report.rml)
让我们开始吧 :
在这种情况下,我想在我的慢速移动报告中使用 Simsun 字体
(仅供参考:我在 Ubuntu 10.04 中这样做)
如何拥有中文字体?
您可以手动安装或通过终端安装
• 如果您想手动安装
- 转到 Windows 操作系统中的 C:\WINDOWS\Fonts
- 复制所需的字体(.ttf / .ttc)
- 复制到您的 Ubuntu 操作系统
- 双击字体并安装
• 如果你想通过终端安装,你可以参考这个链接:http: //xgwang.wordpress.com/2007/11/25/set-up-chinese-fonts-using-microsofts-simsunttf-in-ubuntu- 71-勇敢/
在您的操作系统中有中文字体后,现在我们可以将您的字体注册到报告实验室 注意:您的报告实验室必须是 2.0 以上版本 您可以参考此链接:http: //forum.openerp.com/forum/topic1943。 html
但我做的方式略有不同
首先,在这个路径 /usr/lib/python2.6/dist_packages/reportlab/ 中创建一个名为“fonts”的文件夹,并将 SIMSUN.TTC 放入其中
注意:reportlab 查找 TTF 文件的位置可以在这里找到:rl_config.py(您可以在文件系统中搜索该文件)
其次,之后转到 /usr/share/pyshared/reportlab/lib/styles.py 并将这段代码放在 def getSampleStyleSheet() 下方:(这个 id 是原始的)
def getSampleStyleSheet_JH(): """返回一个中文样式表对象""" stylesheet = StyleSheet1()
stylesheet.add(ParagraphStyle(name='Normal',
fontName='Simsun',
fontSize=10,
leading=12)
)
stylesheet.add(ParagraphStyle(name='BodyText',
parent=stylesheet['Normal'],
spaceBefore=6)
)
stylesheet.add(ParagraphStyle(name='Italic',
parent=stylesheet['BodyText'],
fontName = 'Simsun-Italic')
)
stylesheet.add(ParagraphStyle(name='Heading1',
parent=stylesheet['Normal'],
fontName = 'Simsun-Bold',
fontSize=18,
leading=22,
spaceAfter=6),
alias='h1')
stylesheet.add(ParagraphStyle(name='Title',
parent=stylesheet['Normal'],
fontName = 'Simsun-Bold',
fontSize=18,
leading=22,
alignment=TA_CENTER,
spaceAfter=6),
alias='title')
stylesheet.add(ParagraphStyle(name='Heading2',
parent=stylesheet['Normal'],
fontName = 'Simsun-Bold',
fontSize=14,
leading=18,
spaceBefore=12,
spaceAfter=6),
alias='h2')
stylesheet.add(ParagraphStyle(name='Heading3',
parent=stylesheet['Normal'],
fontName = 'Simsun-BoldItalic',
fontSize=12,
leading=14,
spaceBefore=12,
spaceAfter=6),
alias='h3')
stylesheet.add(ParagraphStyle(name='Bullet',
parent=stylesheet['Normal'],
firstLineIndent=0,
spaceBefore=3),
alias='bu')
stylesheet.add(ParagraphStyle(name='Definition',
parent=stylesheet['Normal'],
firstLineIndent=0,
leftIndent=36,
bulletIndent=0,
spaceBefore=6,
bulletFontName='BoldItalic'),
alias='df')
stylesheet.add(ParagraphStyle(name='Code',
parent=stylesheet['Normal'],
fontName='Courier',
fontSize=8,
leading=8.8,
firstLineIndent=0,
leftIndent=36))
第三,去 /opt/openerp61/server/openerp/report/render/rml2pdf/ init .py 并改成这样:
从 trml2pdf 导入 parseString, parseNode
从 reportlab.lib.fonts 导入 addMapping
从 reportlab.pdfbase 导入 pdfmetrics
从 reportlab.pdfbase.ttfonts 导入 TTFont
从 reportlab.pdfbase.cidfonts 导入 UnicodeCIDFont,findCMapFile
pdfmetrics.registerFont(TTFont('SimSun','SIMSUN.TTC')) # 此处输入的字体名称必须与步骤1中“fonts”文件夹中复制的字体名称完全相同
对于 ['SimSun'] 中的人脸名称:
addMapping(facename, 0, 0, facename) #正常
addMapping(facename, 0, 1, facename) #斜体
addMapping(facename, 1, 0, facename) #bold
addMapping(facename, 1, 1, facename) #斜体加粗
第四,转到 /opt/openerp61/server/openerp/report/render/rml2pdf/trml2pdf.py
• 将您的编码从“cp1252”更改为“UTF-8” • 添加以下代码:
从 reportlab.lib.enums 导入 TA_LEFT、TA_RIGHT、TA_CENTER、TA_JUSTIFY 从 reportlab.lib.styles 导入 getSampleStyleSheet_JH、ParagraphStyle、StyleSheet1
• 将所有“getSampleStyleSheet”替换为“getSampleStyleSheet_JH”</p>
最后一步重启你的openerp服务两次注意:如果你重启你的opener服务时提示“start-stop-daemon:warning: failed to kill 5445: No such process”,你可以把第3步的代码注释掉什么错误并再次取消注释,但不要忘记再次重新启动您的服务