我需要从rtf格式的字符串中减去文本。
我有一个rtf格式的字符串
std::wstring sString= L"{\\rtf1\\ansi\\ansicpg1252\\deff0\\nouicompat\\deflang2057{\\fonttbl{\\f0\\fnil\\fprq12\\fcharset0 Times New Roman;}}\r\n{\\*\\generator Riched20 10.0.19041}\\viewkind4\\uc1 \r\n\\pard\\f0\\fs24 HELLO\\par\r\n}\r\n"
如何从变量sString中获取字符串“HELLO”?
1条答案
按热度按时间lyr7nygr1#
由于您使用的是Windows(并且假设您不需要跨平台的解决方案),因此有一种方法可以在不使用任何外部库的情况下完成此操作。
1.创建一个不可见的
RICHEDIT
子窗口。因为这应该是一个子窗口,所以它需要一个有效的父窗口,但是父窗口是什么并不重要。1.向它发送一个
EM_STREAMIN
消息,并设置SF_RTF
标志以加载RTF。实际上,数据是从回调函数请求的,因此需要一些技巧。1.向它发送一个
EM_STREAMOUT
消息,并设置SF_TEXT
标志以检索相应的纯文本,这将反复调用指定的回调函数,直到没有更多的内容可检索,所以每次都可能需要将数据附加到std::string
或类似的文件中。1.销毁您在步骤1中创建的窗口(或者,如果您打算重新使用它,您可以保留它)。
要把它全部弄清楚是有点麻烦,但也不是那么难。准备好做一些背景阅读吧。