RTF table 之前的文本导致第一个 table 单元格为空

Text before an RTF table causes first table cell to be empty

在 C# 中,我手动创建 RTF 字符串。这些稍后会通过 Microsoft Lync SDK 作为持久聊天消息发送。对于 Lync 服务器在客户端中显示之前如何处理这些消息,我没有太多的控制权或洞察力。有可能他们的黑匣子里发生了什么事,但我正在努力涵盖我的所有基地。

我正在尝试创建一个 table,它前面有一些文字。理想情况下,它可能看起来像这样(我没有 post 三张图片的代表,所以我只是在 HTML 中写下它的样子):

table, td {
  border: 1px solid black;
}

td {
  padding: 15px;
}
text
<table>
  <tr>
    <td>c1</td>
    <td>c2</td>
  </tr>
</table>

但是,如果我在 table 之前有文字,第一个单元格总是空的。使用以下代码:

string message = @"{\rtf1\ansi\deff0{text}\trowd{c1}\intbl\cell{c2}\intbl\cell\row}";

我会在客户端得到这个结果:

Undesirable Result - First Cell Empty

如果我只是删除开头的文字,table 将按需要出现。代码:

string message = @"{\rtf1\ansi\deff0\trowd{c1}\intbl\cell{c2}\intbl\cell\row}";

客户端结果:

Desirable Table Format

我已经尝试了上述代码的多种变体。我在互联网上搜索了很长时间。我也承认我是 RTF 的新手。不幸的是,持久聊天仅支持 Lync SDK,后者仅支持明文或 RTF。

如果有人能提供见解或指导我在哪里寻找对此行为的解释,我将不胜感激。如果需要更多信息,请告诉我。谢谢。

在写字板中查看示例 RTF 会显示相同的效果,因此它不是特定于 Lync 的。从您的示例开始,我在写字板中编辑了文本以替换丢失的单元格并保存它,以便我可以看到 RTF 发生了怎样的变化。主要区别似乎是在文本和 table 之间插入了 \par

试试这个:

string message = @"{\rtf1\ansi\deff0{text}\par\trowd{c1}\intbl\cell{c2}\intbl\cell\row}";