RTF子弹列表示例

时间:2013-03-12 17:25:49

标签: rtf

似乎找不到一个非常简单的RTF子弹列表的工作示例,如下所示:

  • 你好
  • 世界
    • 嵌套(但请将正方形作为子弹)
    • 还嵌套(也是方形子弹)
  • 再次定期

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

6 个答案:

答案 0 :(得分:8)

如果您长时间查看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\tx等等),我不需要我的应用程序,因为我只使用<ol><ul><li>标记。标题为\pnlvlblt的主要标题是使该列表成为项目符号列表。此外,\'B7是项目符号的实际unicode标记,·

最新的RTF规范如下:

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

答案 1 :(得分:4)

一种简单直接的方法是使用如下字符:

\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使用都可以。对于unicodes,请参阅此site

有关详细信息,请务必参阅RTF规范的Bullets and Numbering section

答案 2 :(得分:2)

我尝试了Saur的anser,但是“同样嵌套(也是方形子弹)”系列的A也被方形子弹掩盖了。不知道为什么会发生这种情况 ■lso嵌套(也是方形子弹)

我喜欢使用行缩进命令,因此如果发生换行,包装的文本也会缩进。当你执行\ 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
}

答案 3 :(得分: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}
}

呈现为:

enter image description here

请注意,多级列表并不像单词中那样真正被威胁。它基本上是一个带有缩进节点的普通列表。

说明:

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

\pntext:所有已编号/项目符号段落的预加号

\pn:打开段落编号(子弹列表也需要)

\pnlvlblt:此段落是一个子弹段落

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

\u8226?unicode character for bullet point

\u9642? unicode character for small black square

\tab:在图标

后面添加一个标签

\par:段落

答案 4 :(得分: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);

结果

Result

答案 5 :(得分:0)

这里是执行此操作的另一种简单方法,仅在页面上正确显示即可。您所要做的就是将\ 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}
}

enter image description here