使用PyRTF的生成RTF文件

来源:互联网 发布:js修改div属性 编辑:程序博客网 时间:2024/06/07 00:04
小试了一把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

原创粉丝点击