小试了一把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
本文介绍使用PyRTF生成RTF文档的方法,并通过示例代码展示了如何支持中文内容。此外,还讨论了PyRTF在实际应用中存在的限制。
765

被折叠的 条评论
为什么被折叠?



