在pentaho报告desginer ubuntu中的中文字体

时间:2013-09-18 03:43:14

标签: fonts pentaho report-designer chinese-locale

总之,我想问一下pentaho报告设计器中的中文字体

场景是这样的: 第一种情况:  我在报告中使用了WenQuanYi Zen Hei字体(中文字体) - 当我打印预览时它工作正常(中文字符显示) - 当我打印PDF时,它也有效

第二种情况 我在报告中使用了Simsun字体(中文字体) - 当我打印预览时它工作正常(中文字符显示) - 当我打印PDF时,它没有用(中文字符根本没有显示)

  • fyi,我使用ubuntu 10.04和WenQuan字体已经在那里同时simsun字体是我手动安装到我的ubuntu OS中的字体

有人能帮助我吗? 我应该将字体嵌入pentaho或其他东西吗?

1 个答案:

答案 0 :(得分:0)

如何启用RML报告以便能够打印中文字符?

  1. 确保你有中文字体(Simsun,Simhei,WenQuanYiZhenHei)
  2. 将您的字体嵌入到RML库和设置中,或者我们可以说“注册要在RML中使用的字体”
  3. 更改RML报告中的fontName(例如:slow_moving_report.rml)
  4. 让我们开始:

    在这种情况下,我想在慢速移动报告中使用Simsun字体

    (仅供参考:我在Ubuntu 10.04中这样做)

    如何使用中文字体?

    您可以手动安装或通过终端

    安装

    •如果您想手动安装

    1. 转到Windows操作系统中的C:\ WINDOWS \ Fonts
    2. 复制您想要的字体(.ttf / .ttc)
    3. 复制到您的Ubuntu操作系统
    4. 双击字体并安装
    5. •如果您想通过终端安装,可以参考以下链接: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中注释掉代码并找出错误并再次取消注释但是不要忘记重新启动服务