使用PyRTF的生成RTF文件

小试了一把PyRTF,动态生成RTF文件

PyRTF 是动态生成 RTF 文档的一个Python包。如果你需要动态生成使用MS Word查看的一些文档之类的东东,这个产品可能是你的选择。doc格式不公开,而且一般生成起来很慢,而且依赖一些com组件。

RTF 文件是一个公开的格式, PyRTF则是一个很小的纯Python的包。因此很多情况下,选择PyRTF也是一个不错的选择。

RTF的格式说明

英文的规范阅读好麻烦,先转载一个 中文的RTF格式介绍.

{\rtf1\ansi\ansicpg936\deflang1033\deflangfe2052     -- rtf 字符串的声明
{\fonttbl                                              -- 字体列表
     {\f0\finl Comic Sans MS;}                         -- 字体列表中的第一项
     {\f1\fmodern\fprq6\fcharset134\'cb\'ce\'cc\'e5}   -- 字体列表中的第二项,
                                -- “\’cb\’ce\’cc\’e5” 是对中文字符的特殊说明,
                                -- 对于特殊的非英语字符串,如中文,日文等在rtf格式中
                                -- 的存储都是以ASCII的形式存放的
}

{\colortbl                    -- 颜色列表
 ;                            -- 颜色列表的第一项会放一个Color.Empty的值
 \red0\green0\blue255;        -- 颜色列表的第二项
 …}

\viewkind4\uc1\pard\nowindctlpar\qj         -- rtf 字符串主体的开始
\cf1\highlight2\lang2052\f0\fs20 string     -- “string”字符串使用颜色列表中的第二项,
                     -- 高亮的背景色为颜色列表的第三项,
                     -- 字体使用字体列表中的第一项字体,字号为10号字体(20/2=10)
…}

PyRTF编程

下载PyRTF后,可以参考其中的example.py文件。主要问题是对中文的支持。下面是我的一个小例子:

doc = Document()
ss = doc.StyleSheet
# 在这里加入中文字体,\xcb\xce\xcc\xe5是“宋体”的中文内码
ss.Fonts.append(Font("\\'cb\\'ce\\'cc\\'e5", 'modern', 134, 6))
section = Section()
doc.Sections.append(section)
# 得到这个字体
tps = TextPS(font=getattr(ss.Fonts, "\\'cb\\'ce\\'cc\\'e5") )
# 设置颜色
sps = ShadingPS(background=ss.Colours.Red)
text = Text('中国', tps, sps)
p = Paragraph()
p.append(text)
section.append(p)
DR = Renderer()
out = file('bb.rtf','w')
DR.Write(doc, out)
out.close()

存在的问题

最终我还是没有选择PyRTF,主要的原因是:

  • 不能解析和控制RTF文件,也就是说,无法根据模板来制作RTF文件
  • 表格不能设置背景颜色。相信以后PyRTF会提供这个功能的

我选择了什么?当然是使用OpenOffice的PyUNO进行开发 ;-)

转自:http://zoomq.qiniudn.com/ZQScrapBook/ZqFLOSS/data/20051227093533/index.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值