用v6无法打印中文汉字 (reportlab的问题)
-
理论上原来的base_report_cn还是能用的,只是执行效率不够高。
V6去年引入了customfonts模块以方便rml-pdf报表的字体定义,当时我写了一个很简单的脚本测试了一下,现稍做修改附在附件中。稍后传到launchpad,大家共同维护
另,表头,表尾的字体在系统管理->公司->公司中定义
[EDIT] 字体文件太大,附件放不下, [检测到链接无效,已移除] -
OE 6.0 使用了以下自定义字体。
CustomTTFonts = [ ('Helvetica',"DejaVu Sans", "DejaVuSans.ttf", 'normal'),
('Helvetica',"DejaVu Sans Bold", "DejaVuSans-Bold.ttf", 'bold'),
('Helvetica',"DejaVu Sans Oblique", "DejaVuSans-Oblique.ttf", 'italic'),
('Helvetica',"DejaVu Sans BoldOblique", "DejaVuSans-BoldOblique.ttf", 'bolditalic'),
('Times',"Liberation Serif", "LiberationSerif-Regular.ttf", 'normal'),
('Times',"Liberation Serif Bold", "LiberationSerif-Bold.ttf", 'bold'),
('Times',"Liberation Serif Italic", "LiberationSerif-Italic.ttf", 'italic'),
('Times',"Liberation Serif BoldItalic", "LiberationSerif-BoldItalic.ttf", 'bolditalic'),
('Times-Roman',"Liberation Serif", "LiberationSerif-Regular.ttf", 'normal'),
('Times-Roman',"Liberation Serif Bold", "LiberationSerif-Bold.ttf", 'bold'),
('Times-Roman',"Liberation Serif Italic", "LiberationSerif-Italic.ttf", 'italic'),
('Times-Roman',"Liberation Serif BoldItalic", "LiberationSerif-BoldItalic.ttf", 'bolditalic'),
('Courier',"FreeMono", "FreeMono.ttf", 'normal'),
('Courier',"FreeMono Bold", "FreeMonoBold.ttf", 'bold'),
('Courier',"FreeMono Oblique", "FreeMonoOblique.ttf", 'italic'),
('Courier',"FreeMono BoldOblique", "FreeMonoBoldOblique.ttf", 'bolditalic'),]
系统需要在字体文件夹能搜索到上面列出的字体文件,最简单的方法是拷贝simsun.ttf 文件到字体文件夹,然后分别改名为“DejaVuSans.ttf”,
“DejaVuSans-Bold.ttf”,“DejaVuSans-Oblique.ttf”,“DejaVuSans-BoldOblique.ttf”。这样,全部报表都可以正常使用中文了。 -
把import openerp.report.render.rml2pdf.customfons改成 import report.render.rml2pdf.customfonts
试试 -
中文pdf报表输出已经并入l10n_cn模块: http://code.google.com/p/openerp-china/source/checkout
为简化问题,该模块中自带了两个开源字体。欢迎大家测试汇报问题。 -
呵呵,有时间会加一些判断逻辑使用各个系统自带的中文字体,达人们有时间也可以共同改进呀。
-
有人能解决繁体的pdf report吗
-
下载这里的模块: [检测到链接无效,已移除]
这是一个很简单的模块,照葫芦画瓢,你就把繁体的pdf模块搞定了。
如果实在搞不明白,只要将两个繁体字体改名为该模块中所带的字体文件的名字并将模块中的两个字体拷贝覆盖掉,就可以了。 -
校长?
那简体繁体的pdf模块能同时存在吗?
比如,我现在customer里面又有简体 又有繁体,打印报表的时候它如何判定? -
http://shine-it.net/index.php/topic,2230.0.html
手工在你的 rml 文件中, 添加字体注册,然后并使用这些字体就OK了.当然,服务器上, 你的简繁字体文件都要放到能检索到的位置... -
[quote author=kingcarrie link=topic=2314.msg8124#msg8124 date=1307821145]
校长?
那简体繁体的pdf模块能同时存在吗?
比如,我现在customer里面又有简体 又有繁体,打印报表的时候它如何判定?
[/quote]
我介绍的模块的主要功能是让系统中默认的报表能以中文显示。如果你要在自定义的报表中显示不同的字体,楼下Shelly兄已经解释的很清楚了。
除了Shelly同学介绍的在rml中注册字体的方法,还可以直接在中文pdf模块中注册字体,甚至创建一个view让用户自己选择需要注册的字体,这些就需要做一些代码开发了。