0

大家好,我想问一下pentaho报表设计器中的中文字体

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

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

  • 仅供参考,我使用的是 ubuntu 10.04,而 WenQuan 字体已经在其中,同时 simsun 字体是我手动安装到我的 ubuntu 操作系统中的字体

有人可以帮助我吗?我应该将字体嵌入pentaho还是什么?

4

1 回答 1

0

如何使 RML Reports 能够打印汉字?

  1. 确保您有中文字体(Simsun、Simhei、WenQuanYiZhenHei)
  2. 将您的字体嵌入到 RML 库和设置中,或者我们可能会说“注册您要在 RML 中使用的字体”</li>
  3. 更改 RML 报告中的字体名称(例如:slow_moving_report.rml)

让我们开始吧 :

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

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

如何拥有中文字体?

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

• 如果您想手动安装

  1. 转到 Windows 操作系统中的 C:\WINDOWS\Fonts
  2. 复制所需的字体(.ttf / .ttc)
  3. 复制到您的 Ubuntu 操作系统
  4. 双击字体并安装

• 如果你想通过终端安装,你可以参考这个链接: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步的代码注释掉什么错误并再次取消注释,但不要忘记再次重新启动您的服务

于 2013-09-19T06:53:30.197 回答