Navigation

    Odoo 中文社区

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Popular
    • Users
    • Groups

    Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

    由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

    本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

    开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

    如果您登录系统碰到问题,请在微信公众号留言:

    PDF 报表汉化步骤

    Odoo 开发与实施交流
    6
    14
    12188
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • O
      oldrev last edited by

      为了汉化 Tinyerp 的报表,折腾我整整一天的时间,呵呵。我提供的此方法不像 wiki 上的那个需要 *nix 的命令行工具,而且一劳永逸,以后可以直接使用 sxw 设计报表。

      我的测试环境:
      [list][li]Windows XP SP3[/li][li]Python 2.5[/li][li]Postgresql 8.3[/li][li]源码安装的 Tiny ERP v4.2.3.3[/li][/list]
      下面正文开始:

      1. 修改 tinyerpbinreportrenderrml2pdf__init__.py,添加如下内容:[code]
        from reportlab.lib.fonts import addMapping
        from reportlab.pdfbase import pdfmetrics
        from reportlab.pdfbase.ttfonts import TTFont
        from reportlab.pdfbase.cidfonts import CIDFont, findCMapFile
        from reportlab.lib.fonts import addMapping

      #注意这里是 Windows 的字体,Linux 可以换成 Linux 自带的中文字体,或者把 Windows 的复制过去
      pdfmetrics.registerFont(TTFont('SimSun','simsun.ttc')) #宋体
      pdfmetrics.registerFont(TTFont('SimHei','simhei.ttf')) #黑体

      for facename in ['SimSun', 'SimHei']:
      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[/code]2. 修改 tinyerpbinaddonsbase_report_designerwizardtiny_sxw2rmlnormalized_oo2rml.xsl 文件,把里面的
      <xsl:template name="make_fontnames"> 元素下的 Roman-Times 之类的字体名称改成前面设置的 SimSun 和 SimHei。

      1. 用 tinyerp 客户端的“系统管理->自定义->底层->基础数据->报表XML”,选择你希望修改的现存报表,单击右边的“修改存在的报表”下载 .sxw 文件,用 openoffice 打开,把里面的字体名称都改成 SimSun 和 SimHei,最好把所有的斜体去掉,因为中文本没这个概念。另外,也可以修改报表的布局,如果你懂得它的模板语言的话。完成以后再用此功能上传 .sxw 文件就搞定了。

      [[i] 本帖最后由 oldrev 于 2008-10-10 14:09 编辑 [/i]]

      1 Reply Last reply Reply Quote 0
      • digitalsatori
        digitalsatori 管理员 last edited by

        太需要你这样的强人了。谢谢分享。

        1 Reply Last reply Reply Quote 0
        • L
          liuyuan_jq last edited by

          报表的页眉和页脚在addons/custom/corporate_rml_header.rml

          [[i] 本帖最后由 liuyuan_jq 于 2008-10-10 14:17 编辑 [/i]]

          1 Reply Last reply Reply Quote 0
          • O
            openSourceERP last edited by

            替换的工作直接交给linux完成。

            1. 获取中文字体文件 (本例中使用 simsun.ttc (全称: "SimSun"))

            2. 复制至 tiny/bin/reportlab/fonts/
              这样你可以把字体文件拷贝到reportlab的目录下,
              这个目录是在python的安装目录下的site-package>reportlab>font目录。
              当然你将字体文件放在tiny/bin/reportlab/fonts/下也没有问题,

            3. 编辑 tiny/report/render/rml2pdf/trml2pdf.py, 插入以下代码:

            encoding = 'UTF-8'

            from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY
            from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle, StyleSheet1

            def getZhSampleStyleSheet():
            """Returns a chinese stylesheet object"""
            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'))
            stylesheet.add(ParagraphStyle(name='Heading1',parent=stylesheet['Normal'],fontName='SimSun',fontSize=18,leading=22,spaceAfter=6),alias='h1')

             stylesheet.add(ParagraphStyle(name='Title',parent=stylesheet['Normal'],fontName='SimSun',fontSize=18,leading=22,alignment=TA_CENTER,spaceAfter=6),alias='title')
             stylesheet.add(ParagraphStyle(name='Heading2',parent=stylesheet['Normal'],fontName='SimSun',fontSize=14,leading=18,spaceBefore=12,spaceAfter=6),alias='h2')
             stylesheet.add(ParagraphStyle(name='Heading3',parent=stylesheet['Normal'],fontName='SimSun',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='SimSun'),alias='df')
             stylesheet.add(ParagraphStyle(name='Code',parent=stylesheet['Normal'],fontName='SimSun',fontSize=8,leading=8.8,firstLineIndent=0,leftIndent=36))
             return stylesheet
            
            1. 在同样的文件中搜索 reportlab.lib.styles.getSampleStyleSheet() 用 getZhSampleStyleSheet() 替换(共六处)

            2. 编辑 tiny/report/render/rml2pdf/init.py, 插入以下代码:

            #add by chenzp
            from reportlab.lib.fonts import addMapping
            from reportlab.pdfbase import pdfmetrics
            from reportlab.pdfbase.ttfonts import TTFont
            from reportlab.pdfbase.cidfonts import UnicodeCIDFont, findCMapFile
            from reportlab.lib.fonts import addMapping

            pdfmetrics.registerFont(UnicodeCIDFont('STSong-Light'))
            pdfmetrics.registerFont(TTFont('SimSun','simsun.ttc'))
            pdfmetrics.registerFont(TTFont('SimHei','simhei.ttf'))
            pdfmetrics.registerFont(TTFont('SimKai','SIMKAI.TTF'))
            pdfmetrics.registerFont(TTFont('SimFang','SIMFANG.TTF'))
            pdfmetrics.registerFont(TTFont('SimLi','SIMLI.TTF'))
            pdfmetrics.registerFont(TTFont('SimYou','SIMYOU.TTF'))

            for facename in ['SimSun','SimHei','SimKai','SimFang','SimLi','SimYou']:
            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

            6.回到tinyerp的安装目录 。使用以下命令使所有的报表使用SimSun 字体:

            sed -i 's/Times-Roman/SimSun/g' find ./addons -name "*.rml"
            sed -i 's/Times-BoldItalic/SimSun/g' find ./addons -name "*.rml"
            sed -i 's/Times-Bold/SimSun/g' find ./addons -name "*.rml"
            sed -i 's/Times-Italic/SimSun/g' find ./addons -name "*.rml"
            sed -i 's/Helvetica-BoldOblique/SimSun/g' find ./addons -name "*.rml"

            sed -i 's/Helvetica-BoldOblique/SimSun/g' find ./addons -name "*.xsl"
            sed -i 's/Helvetica-Bold/SimSun/g' find ./addons -name "*.rml"
            sed -i 's/Helvetica-Bold/SimSun/g' find ./addons -name "*.xsl"
            sed -i 's/Helvetica-Oblique/SimSun/g' find ./addons -name "*.xsl"

            sed -i 's/Helvetica/SimSun/g' find ./addons -name "*.rml"
            sed -i 's/Helvetica/SimSun/g' find ./addons -name "*.xsl"
            sed -i 's/Courier-Bold/SimSun/g' find ./addons -name "*.rml"
            sed -i 's/Courier/SimSun/g' find ./addons -name "*.xsl"
            sed -i 's/Courier/SimSun/g' find ./addons -name "*.rml"

            搞定!

            [[i] 本帖最后由 openSourceERP 于 2008-10-13 13:58 编辑 [/i]]

            1 Reply Last reply Reply Quote 0
            • O
              oldrev last edited by

              楼上的大哥,sed 命令是错的,把 Arial Unicode MS 改成 SimSun

              1 Reply Last reply Reply Quote 0
              • S
                simon last edited by

                用论坛0.33不能用这个办法,因为版本不同功能上有区别。
                用0.33的需要手动用命令行转换sxw文件为rml
                在tiny_sxw2rml-0.9.3包里在目录执行如果不下载0.33的addonsbase_report_designerwizardtiny_sxw2rmltiny_sxw2rml-0.9.3下也有
                命令为:tiny_sxw2rml.py xyz.sxw>xyz,rml (xyz为文件名)

                不过要修改下normalized_oo2rml.xsl这个文件不然中文都成方块
                在文件的末尾处把所有Times-XXX都改成simsun

                [[i] 本帖最后由 simon 于 2008-10-10 14:49 编辑 [/i]]

                1 Reply Last reply Reply Quote 0
                • O
                  openSourceERP last edited by

                  [quote]原帖由 [i]oldrev[/i] 于 2008-10-10 14:30 发表 www.shine-it.net/redirect.php?goto=findpost&pid=1411&ptid=333
                  楼上的大哥,sed 命令是错的,把 Arial Unicode MS 改成 SimSun [/quote]
                  lz 果然很强。有没有openoffice的报表插件?

                  1 Reply Last reply Reply Quote 0
                  • O
                    oldrev last edited by

                    OpenOffice 插件似乎是要收费的,还不便宜

                    1 Reply Last reply Reply Quote 0
                    • O
                      oldrev last edited by

                      在 Windows 2003 Server 上运行可能会出现 reportlab 提示找不到字体的问题,解决的方法是把 simsun.ttc 和 simhei.ttc 放到 tinyerpquarkerpbinreportlabfonts 下

                      1 Reply Last reply Reply Quote 0
                      • S
                        simon last edited by

                        。。。。。

                        [[i] 本帖最后由 simon 于 2008-10-27 16:56 编辑 [/i]]

                        1 Reply Last reply Reply Quote 0
                        • S
                          simon last edited by

                          4.2.3的版本用上面的方法还是出现黑块和翻译的不完整,看图
                          那黑块就是有些中文出不来,同时部分翻译也不全
                          [attach]148[/attach]

                          1 Reply Last reply Reply Quote 0
                          • S
                            simon last edited by

                            原来是normalized_oo2rml文件的问题不过怪了这个问题不是转rml的吗怎么一改就好了呢。
                            不过printScreen还是有黑块

                            还有 opensourceERP[u]的方法才能消除黑块同时[/u]要注意修改的时候要注意那些字体的大小写

                            [attach]149[/attach]

                            [[i] 本帖最后由 simon 于 2008-11-4 16:01 编辑 [/i]]

                            1 Reply Last reply Reply Quote 0
                            • O
                              ople last edited by

                              楼主,pg8.3新建帐套的问题怎么解决的
                              偶是新手,tiny server用VMWare上的FreeBSD7.0,client用xp
                              pg8.3折腾了好久,现在是8.2

                              1 Reply Last reply Reply Quote 0
                              • First post
                                Last post