附加 RTF 格式样式

Appending RTF formatting styles

我正在尝试将格式和文本附加到我的 RTF 文件的末尾。

我可以正常写入我的文件,但附加不起作用。它使整个文档空白。我对 Python 还是很陌生(比如 5 小时),但这对于这种语言来说是一个很好的项目。可能与正确刷新或关闭文档有关?或者甚至是通过 r'' 追加的语法?

import os

filename = 'list.rtf'

if os.path.exists(filename):
    append_write = 'a'
else:
    append_write = 'w'

myfile = open(filename,append_write)
myfile.write(r'{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset1 Arial;}}')
myfile.write(r'\b People \b0\line')
myfile.write(r'{\fonttbl{\f0\fswiss\fcharset1 Georgia;}}')
myfile.write(r'\i John \i0\line')
myfile.close()

您不需要为 'append' 和 'write' 使用单独的模式打开,因为 'a' 也可以使用新文件。但是,您仍然需要检查该文件是否存在,因为如果存在,它将已经具有强制性 RTF header。所以检查这个值并将其存储在布尔值中。

RTF 文件以 {\rtf 开头并且必须始终以 } 结尾,因此如果您想添加某些内容 "at the end",则必须删除最后一个字符。最简单的方法是将文件指针移动到末尾减1,然后使用truncate。然后你可以添加任何有效的 RTF 序列(文件 header 除外,如果有的话),最后总是在末尾添加 }

在代码中:

import os
filename = 'list.rtf'
writeHeader = not os.path.exists(filename)

with open(filename,'a') as myfile:
    if writeHeader:
        myfile.write(r'{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset1 Arial;}{\f1\fswiss\fcharset1 Georgia;}}')
    else:
        myfile.seek(-1,2)
        myfile.truncate()
    # your new text comes here
    myfile.write(r'\b Bob \b0\line')
    myfile.write(r'\f1\i Fred \i0\line')
    # all the way to here
    # and then write the end marker
    myfile.write('}')

(我还更正了您的 \fonttbl 代码,因此您可以使用 \f1 将字体设置为格鲁吉亚。\fonttbl 只需出现一次。)