总之,我想问一下pentaho报告设计器中的中文字体
场景是这样的: 第一种情况: 我在报告中使用了WenQuanYi Zen Hei字体(中文字体) - 当我打印预览时它工作正常(中文字符显示) - 当我打印PDF时,它也有效
第二种情况 我在报告中使用了Simsun字体(中文字体) - 当我打印预览时它工作正常(中文字符显示) - 当我打印PDF时,它没有用(中文字符根本没有显示)
有人能帮助我吗? 我应该将字体嵌入pentaho或其他东西吗?
答案 0 :(得分:0)
如何启用RML报告以便能够打印中文字符?
让我们开始:
在这种情况下,我想在慢速移动报告中使用Simsun字体
(仅供参考:我在Ubuntu 10.04中这样做)
如何使用中文字体?
您可以手动安装或通过终端
安装•如果您想手动安装
•如果您想通过终端安装,可以参考以下链接:http://xgwang.wordpress.com/2007/11/25/set-up-chinese-fonts-using-microsofts-simsunttf-in-ubuntu-71-gutsy/
在您的操作系统中有中文字体后,现在我们可以将您的字体注册到报告实验室 注意:您的报告实验室必须是上面的2.0版 您可以参考以下链接:http://forum.openerp.com/forum/topic1943.html 但我的方式略有不同
首先,在此路径中创建一个名为“fonts”的文件夹/usr/lib/python2.6/dist_packages/reportlab/ 并将SIMSUN.TTC放入其中
注意:可以在此处找到reportlab查找TTF文件的位置:rl_config.py (您可以在文件系统中搜索文件)
其次,在此之后转到/usr/share/pyshared/reportlab/lib/styles.py 并将此代码放在def getSampleStyleSheet()下面:(这一个是原始的id)
def getSampleStyleSheet_JH(): msgstr“”“返回中文样式表对象”“” 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 import parseString,parseNode
来自reportlab.lib.fonts的导入addMapping
来自reportlab.pdfbase import pdfmetrics
来自reportlab.pdfbase.ttfonts的导入TTFont
来自reportlab.pdfbase.cidfonts的导入UnicodeCIDFont,findCMapFile
pdfmetrics.registerFont(TTFont('SimSun','SIMSUN.TTC'))#此处放置的字体名称必须与您在步骤1中的“fonts”文件夹中复制的字体名称完全相同
for ['SimSun']中的facename:
addMapping(facename,0,0,facename)#normal
addMapping(facename,0,1,facename)#italic
addMapping(facename,1,0,facename)#bold
addMapping(facename,1,1,facename)#italic and bold
Forth,转到/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”
最后一步重启你的openerp服务TWICE 注意:如果当你重新启动你的开启者服务时,它会提示“start-stop-daemon:警告:未能杀死5445:没有这样的过程”,你可以在步骤3中注释掉代码并找出错误并再次取消注释但是不要忘记重新启动服务