13

似乎不可能为如下所示的 RTF 项目符号列表找到一个非常简单的工作示例:

  • 你好
  • 世界
    • 嵌套(但请用正方形作为项目符号)
    • 也嵌套(也是方形项目符号)
  • 并再次定期

我尝试使用 Word 或 TextEdit.app 制作一个小样本,但它们会产生很多垃圾。任何人都可以帮忙吗?

4

6 回答 6

10

如果您在 Word 或 Wordpad 格式的 RTF 中查看足够长的时间,您会发现一些如下所示的行:

{\f2 {\pntext \'B7\tab}{*\pn\pnlvlblt\pnstart1{\pntxtb\'B7}}{\ltrch 这是一个测试。}\li720\ri0\sa0\sb0\jclisttab\tx720\ fi-360\ql\par}

{\f2 {\pntext \'B7\tab}{*\pn\pnlvlblt\pnstart1{\pntxtb\'B7}}{\ltrch 这也是。}\li720\ri0\sa0\sb0\jclisttab\tx720\fi -360\ql\par}

这将像这样格式化

  • 这是一个测验。
  • 这也是。

嵌套列表可能有点难,但如果您没有任何嵌套列表,这就是您想要的。

现在这取决于你想用这个做什么。如果您只是显示它,那么每个标签都意味着有用的东西。当我使用列表时,我正在将它们转换为 HTML,因此我的应用程序不需要很多格式化标签( \li\ri、等),因为我只是使用,和标签。最主要的是看到它的标签,这使得这个列表成为一个项目符号列表。此外,是子弹的实际 unicode 标签,·\tx<ol><ul><li>\pnlvlblt\'B7

最新的 RTF 规范在这里:

https://www.microsoft.com/en-us/download/details.aspx?id=10725

于 2013-06-28T20:42:37.890 回答
6

一个简单直接的方法是只使用字符,如下所示:

\line \bullet Hello
\line \bullet World
\line \tab \bullet Nested (but with square as bullet please)
\line \tab \u9632 Also nested (also square bullet)
\line \tab and regular again

之后您仍然可以将 RTF 解析回基于标签的格式,其中包含的标签作为层次结构信息由缩进提供。

如您所见,任何类型的 unicode 用法都可以。对于 unicode,请参阅此站点

有关更多信息,请务必查阅 RTF 规范的项目符号和编号部分

于 2013-10-31T06:28:30.897 回答
2

我尝试了 Saur 的分析器,但“也嵌套(也是方形项目符号)”行的 A 也被方形项目符号覆盖。不知道为什么会这样。
■同样嵌套(也是方形项目符号)

我喜欢使用 line indent 命令,所以如果发生换行,换行的文本也会缩进。当您执行 \line \tab 时,任何超出打印页面末尾的内容都将从左边距开始,而不是从您的缩进文本开始的位置开始。这是由 System.Windows.Forms.RichTextBox 生成的系统,我将其粘贴到(来自 MS-Word)中,然后调用 RichTextBox.RTF 来获取代码。

{\rtf1\fbidis\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\froman\fprq2\fcharset2 Symbol;}{\f1\froman\fprq2\fcharset0 Times New Roman;}{\f2\fnil\fprq2\fcharset2 Wingdings;}{\f3\fnil\fcharset0 Microsoft Sans Serif;}}
\viewkind4\uc1\pard\ltrpar\fi-360\li360\f0\fs20\'b7\tab\f1 Hello\par
\f0\'b7\tab\f1 World\par
\pard\ltrpar\fi-360\li990\f2\'a7\tab\f1 Nested (but with square as bullet please)\par
\f2\'a7\tab\f1 Also nested (also square bullet)\par
\pard\ltrpar\fi-360\li360\sa200\sl276\slmult1\f0\'b7\tab\f1 and regular again\lang1024\par
\pard\ltrpar\lang1033\f3\fs17\par
}
于 2014-01-06T22:18:45.117 回答
2

这是另一种简单的方法,只要在页面上正确显示即可。您所要做的就是用 \li 设置块缩进,用 \fi 设置负首行缩进,并在行首使用 \bullet\tab。

{\rtf1\ansi\deff0
{\pard\fi-300\li300\bullet\tab Having demonstrated his model time machine to a handful of reliable witnesses, The Time Traveller, within the week, 
\par}

{\pard\fi-300\li600\bullet\tab Having demonstrated his model time machine to a handful of reliable witnesses, The Time Traveller, within the week, 
\par}
}

在此处输入图像描述

于 2020-04-20T02:38:25.007 回答
1

这就是我创建项目符号列表的方式:

{\rtf1\ansi\deff0
{{\li0\pntext\pn\pnlvlblt\pntxtb\u8226?\tab}{This is item one}\par}
{{\li0\pntext\pn\pnlvlblt\pntxtb\u8226?\tab}{This is item two}\par}
{{\li400\pntext\pn\pnlvlblt\pntxtb\u9642?\tab}{This is item three}\par}
{{\li400\pntext\pn\pnlvlblt\pntxtb\u9642?\tab}{This is item four}\par}
{{\li0\pntext\pn\pnlvlblt\pntxtb\u8226?\tab}{This is item five}\par}
}

呈现为:

在此处输入图像描述

请注意,多级列表并没有真正受到威胁。它基本上是一个带有缩进节点的普通列表。

解释:

\li0: 打算 0(对多级列表有用)

\pntext: 所有编号/项目符号段落的前缀

\pn:打开段落编号(项目符号列表也需要)

\pnlvlblt: 本段为项目符号段

\pntxtb: 之前的文字(图标)

\u8226?:项目符号的 unicode 字符

\u9642? 小黑方块的 unicode 字符

\tab:在图标后添加一个标签

\par: 段尾

于 2018-04-10T14:45:17.950 回答
1

这适用于想要将文本和项目符号列表添加到扩展的 wpf 工具包 (wpfToolKit) richTextBox的人。我创建了这个,因为我对这里的解决方案有一些问题。他们没有为我工作,或者\tab子弹前面太大了。通过这个实现,你可以调整子弹前面的缩进

此实现的注意事项:

  • 您必须使用缩进 ( \li)。在我的情况下,这些值必须相差数百才能看到效果。在此示例中:100 和 500。

  • 用于\par\pard富文本框中的每一行很重要。没有它,它也会缩进其他没有项目符号的行。

  • 标题包含诸如着色之类的内容,您可能不需要这些内容。

方法

public  string AddBullet(string textRow, int indent)
{
    return $@"\li{indent}{{\pntext\f1\'B7}}{{\*\pn\pnlvlblt{{\pntxtb\'B7}}}}{textRow}";
}

public  string AddNewLine(string text)
{
    return $@"{text}\par\pard ";
}


public  string AddHeader(string text, string fontName, int fontSize)
{
    return $@"{{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1031{{\fonttbl{{\f0\fnil\fcharset0 {fontName};}}{{\f1\fnil\fcharset2 Symbol;}}}}{{\colortbl ;\red0\green77\blue187;\red128\green0\blue0;\red0\green0\blue0;\red155\green0\blue211;\red81\green163\blue69;\red51\green51\blue51;}}\viewkind4\uc1\pard\sl0\slmult1\f0\fs{fontSize * 2}\lang7 {text}}}";
}

如何使用方法

var regularRow1     = AddNewLine("AAAA");
var bulletRow1      = AddNewLine(AddBullet("BBBB", 100));
var bulletRowNested = AddNewLine(AddBullet("CCCC", 500));
var bulletRow2      = AddNewLine(AddBullet("BBBB", 100));
var regularRow2     = AddNewLine("AAAA");

var richTextWithoutHeader = regularRow1 + bulletRow1 + bulletRowNested + bulletRow2 + regularRow2;
var richText = AddHeader(richTextWithoutHeader, "Arial", 12);

结果

结果

于 2019-08-11T08:21:24.490 回答