在用Python创建的RTF文件中打印新行

时间:2017-01-06 15:00:14

标签: python rtf

我制作了一个GUI程序,我可以在各个字段中输入一些值。然后将来自这些字段的所有信息组合成字典,然后使用搁置模块存储该字典。只需按一下按钮,我就可以将所有字典条目导出到RTF文件中,因为我希望文件的一部分以斜体格式化。

程序的GUI和搁置部分工作得很好。我遇到的问题是将多行导出到RTF文件。当我打印我要写入RTF文件的字符串到python shell时,我得到多行。但是当我将它导出到RTF时,它们都打印在一行上。我知道这通常应该通过在字符串中添加\ n来修复,但这对我来说无论如何都没有用。任何人都可以告诉我我做错了什么,或者我可以使用斜体保存文本的解决方法吗?

就一个工作实例而言:

data = dict()
data['first'] = {'author': 'Kendall MA'
                 'year': '1987',
                 'title': 'This is a test title'}
data['second'] = {'author': 'Mark',
                  'year': '2014',
                  'title': 'It is not working correctly'}
rtf = open('../test.rtf', 'w')
rtf.write(r'{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Cambria;}}')

for key in data.keys():
    entry = data[key]
    rtf.write(r'{0} ({1}): \i {2} \i0'.format(entry['author'], entry['year'], entry['title']) + '\n')
rtf.write(r'}\n\x00')
rtf.close()

此代码提供的输出是:

Mark(2014):它无法正常工作 Kendall(1987):这是一个测试题目

虽然它应该是:

Mark(2014):它无法正常工作

Kendall(1987):这是一个测试题目

编辑: 我发现/ line和/ par的组合起作用。单独使用它们并不是出于我不清楚的某些原因(也许有人可以解释一下?)。

但是发生了一个新错误。当作者实际上是多个作者时,我按列表输入(['Kendall MA','Powsen RB']),然后使用','。join(entry ['author'])制作单个字符串,第一个词被切断了。所以我会得到 'MA,Powsen RB'代替'Kendall MA,Powsen RB'。有谁知道为什么以及如何应对它?

1 个答案:

答案 0 :(得分:2)

\n在RTF中没有特殊含义。如果您想输出换行符,则需要使用r'\line'r'\par'代替段落(或者除了可读性之外)\n