我试图找到类似的问题,但没有运气。
我需要逐行阅读RTF,修改并保存。 现在是早上4点,我没有想法,这让我疯狂......
问题:
我想阅读的元素是在行[10]中,我可以在运行时,在本地变量中清楚地看到它。但RichTextBox继续在Lines [11]中看到它,而Lines [10]仍为空。
IDEA:
我认为这可能是由格式不正确的RTF造成的,这就是这条线的样子(“!”是这个字符串的必要部分,这就是代码识别它需要处理的行的方式):
"\f!LOREMIPSUM=NW"
我的代码:
这里没有弄乱RTF语法我使用的方法是:
public string ReadLine(int line)
{
int s1 = RTxtBox.GetFirstCharIndexFromLine(line);
int s2 = line < RTxtBox.Lines.Length - 1 ?
RTxtBox.GetFirstCharIndexFromLine(line + 1) - 1 :
RTxtBox.Text.Length;
RTxtBox.Select(s1, s2 - s1);
yPos = line;
xPos = s1;
return RTxtBox.SelectedText;
}
用于测试的MCV样本RTF:(行[1]导致问题)
{\rtf1\ansi\ansicpg1250\deff0\deflang1045\deflangfe1045\deftab648{\fonttbl{\f0\fswiss\fprq2\fcharset238{\*\fname Arial;}Arial CE;}{\f1\fnil\fcharset0 MS Serif;}}
{\colortbl ;\red0\green0\blue0;\red255\green0\blue0;}
\viewkind4\uc1\pard\nowidctlpar\ri-504\tqr\tx9864\cf1\lang1033\f0\fs20 !LOREMIPSUM\cf0\f1\fs24\par
\page\cf2\f0\fs20 !LOREMIPSUM=NW\cf0\f1\fs24\par
\cf1\b\f0\fs28 LOREMIPSUM\cf0\b0\f1\fs24\par
\pard\nowidctlpar\ri-504\tx1512\tx5184\tx6336\tqr\tx9864\cf2\f0\fs20 !LOREM\cf0\f1\fs24\par
\cf2\f0\fs20 !DOLOR=VW\cf0\f1\fs24\par
\pard\nowidctlpar\ri-504\tqr\tx9864\cf2\lang1045\f0\fs20 !SITAMET\cf0\f1\fs24\par
}