c++ 从字符串中删除rtf格式

t30tvxxf  于 2023-03-14  发布在  其他
关注(0)|答案(1)|浏览(109)

我需要从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”?

lyr7nygr

lyr7nygr1#

由于您使用的是Windows(并且假设您不需要跨平台的解决方案),因此有一种方法可以在不使用任何外部库的情况下完成此操作。
1.创建一个不可见的RICHEDIT子窗口。因为这应该是一个子窗口,所以它需要一个有效的父窗口,但是父窗口是什么并不重要。
1.向它发送一个EM_STREAMIN消息,并设置SF_RTF标志以加载RTF。实际上,数据是从回调函数请求的,因此需要一些技巧。
1.向它发送一个EM_STREAMOUT消息,并设置SF_TEXT标志以检索相应的纯文本,这将反复调用指定的回调函数,直到没有更多的内容可检索,所以每次都可能需要将数据附加到std::string或类似的文件中。
1.销毁您在步骤1中创建的窗口(或者,如果您打算重新使用它,您可以保留它)。
要把它全部弄清楚是有点麻烦,但也不是那么难。准备好做一些背景阅读吧。

相关问题