从字符串中删除 rtf

问题描述 投票:0回答:1

我需要从 rtf 格式的字符串中减去文本。

我有一个 rtf 格式的字符串 std::wstring sString= L"{ tf1 nsi nsicpg1252\deff0 ouicompat\deflang2057{ onttbl{ 0 nil prq12 charset0 Times New Roman;}} {\*\generator Riched20 10.0.19041} iewkind4\uc1 \pard 0 s24 你好\par } “

如何从变量 sString 中获取字符串“HELLO”?

c++ string format rtf remove-if
1个回答
0
投票

由于您使用的是 Windows(并且假设您不是在寻找跨平台解决方案),因此有一种方法可以在不使用任何外部库的情况下执行此操作。你要做的是:

  1. 创建一个不可见的

    RICHEDIT
    子窗口。因为这应该是一个子窗口,所以它确实需要一个有效的父窗口,但这并不重要。

  2. 向它发送带有EM_STREAMIN

    标志的
    SF_RTF
    消息以加载您的RTF。数据实际上是从回调函数请求的,所以那里需要一些技巧。

  3. 向其发送 (

    EM_STREAMOUT
    )[https://learn.microsoft.com/en-us/windows/win32/controls/em-streamout] 消息,并设置
    SF_TEXT
    标志以检索相应的纯文本。这将重复调用您指定的回调函数,直到没有更多要检索的内容,因此您可能希望每次都将数据附加到
    std::string
    或类似的。

  4. 销毁您在步骤 1 中创建的窗口(或者如果您打算重新使用它,您可以让它继续运行)。

搞定有点繁琐,但也不是那么难。准备做一些背景阅读。

© www.soinside.com 2019 - 2024. All rights reserved.