项目符号RTF列表在第一行上缩进的方式不同

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

我正在使用.NET和Windows.Forms应用程序。

在RTF框中,我设置(使用.Rtf =)此RTF标记:

{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}          
{\colortbl ;\red0\green0\blue255;\red255\green0\blue0;}
{\*\generator Riched20 10.0.14393}\viewkind4\uc1 
\pard\f0\fs17 
{\pntext\f0 'B7\tab}{\*\pn\pnlvlblt\pnf0\pnindent0{\pntxta\'B7}}\fi-180\li260\f0 The first line in bullet list.
\par{\pntext\f0\'B7\tab}Second line.
\par{\pntext\f0\'B7\tab}Third line.

可见的结果是这样的:

⦁             The first line in bullet list.
⦁   Second line.
⦁   Third line.

在第一行的文本开头之前插入了一堆空格。我不希望这样。

当我从控件中读回RTF时,它现在是:

{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}{\f1\fnil\fcharset2 Symbol;}}

{\*\generator Riched20 10.0.14393}\viewkind4\uc1 

\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}\fi-180\li260\f0\fs24           \fs17 The first line in bullet list.\par

{\pntext\f1\'B7\tab}Second line.\par

{\pntext\f1\'B7\tab}Third line.\par

}

我已经阅读了像http://www.biblioscape.com/rtf15_spec.htm和类似我的资源,并得到关于RTF的一般想法:

这种格式应该会优雅地降级,所以当做旧版读者不支持的新内容时,老版本的额外格式可以显示旧版本,以获得新格式的视觉表现,而较旧的阅读器忽略它不知道的标签。

对于列表,第一行设置了某种样式,以下几行。我已经尝试过修改上面格式化中的所有数值常量,并且我看到渲染如何根据我改变的方式向左或向右移动,但是额外的空间仍然存在。

我想也很奇怪,当我从文本控件中读回RTF时,有一个额外的\fs24似乎突然出现了。

如果任何帮助或解决方案保留列表方面而不仅仅是直观地呈现列表,这也将是有帮助的。原因是该程序稍后将RTF转换为HTML,如果它知道直接创建<ul><ol>标签,而不仅仅是例如子弹字符和新段落,将会有所帮助。

c# .net vb.net winforms rtf
1个回答
2
投票

RichTextBox有一个SelectionBullet属性,可以为选定的文本打开子弹。

如果要为选定文本设置项目符号,可以使用:

richTextBox1.SelectionBullet = true;

如果要插入项目符号文本,可以使用:

var i = richTextBox1.SelectionStart;
var txt = "Lorem\nipsum\ndolor\n";
richTextBox1.SelectedText = txt;
richTextBox1.Select(i, txt.Length);
richTextBox1.SelectionBullet = true;
© www.soinside.com 2019 - 2024. All rights reserved.