Вы не можете использовать метод AppendText, чтобы добавить строку с форматированием Rtf. Поскольку метод AppendRtf не существует, мы должны имитировать c, что при установке SelectionStart
, SelectionLength
и SelectedRtf
.
Вот полный код для достижения того, что вам нужно:
string MergeRtf(params string[] input)
{
var richTextBox1 = new RichTextBox();
if (input!=null && input.Length>0)
{
richTextBox1.Rtf = input[0]; // first input
for(int i=1; i<input.Length; i++)
{
richTextBox1.AppendText("\r\n"); // add a paragraph break
// set the Selection to the end of the Control
richTextBox1.SelectionStart = richTextBox1.TextLength;
// Nothing is selected
richTextBox1.SelectionLength = 0;
// AppenRtf
richTextBox1.SelectedRtf = input[i]; // any subsequent input
}
}
return richTextBox1.Rtf;
}
Вы можете протестировать его из LinqPad с помощью этого testrig:
void Main()
{
string input1 = "{\\rtf1\\ansi\\ansicpg1250\\deff0\\deflang1029{\\fonttbl{\\f0\\fnil\\fcharset238 Tahoma;}}\r\n{\\*\\generator Riched20 12.0.6556.5000;}\\viewkind4\\uc1\r\n\\pard\\f0\\fs16 St\\'f8edisko 222, ppokji\\'9a\\'9dovna Wustenrot PU 15.20022.0037626\\par\r\nPlatba na fakturu, p\\'f8epolsat na poji\\'9a\\'9dovnu a pln\\'ecn\\'ed na \\'fa\\'e8et klienta.\\par\r\n\\'c8\\'edsklo \\'fa\\'e8tu bude dod\\'e1no\\par\r\n}\r\n\0";
string input2 = "{\\rtf1\\ansi\\ansicpg1250\\uc1\\deff0\\deflang0\\deflangfe0{\\fonttbl{\\f0\\fnil Times New Roman;}{\\f1\\fnil Arial;}{\\f2\\fnil Verdana;}{\\f3\\fnil Webdings;}}{\\colortbl;\\red0\\green0\\blue0;\\red0\\green0\\blue255;\\red0\\green255\\blue255;\\red0\\green255\\blue0;\\red0\\green200\\blue150;\\red255\\green0\\blue255;\\red255\\green0\\blue0;\\red255\\green255\\blue0;\\red255\\green255\\blue255;\\red0\\green0\\blue128;\\red0\\green128\\blue128;\\red0\\green128\\blue0;\\red128\\green0\\blue128;\\red128\\green0\\blue0;\\red128\\green128\\blue0;\\red128\\green128\\blue128;\\red192\\green192\\blue192;\\red255\\green128\\blue64;}\r\n\\pard\\sb0\\sa50\\plain\\f1\\cf1\\b0\\i0\\fs18 Při demontáži lišty LZ dveří zjištěna vada lakování.\\par}";
var total = MergeRtf(input1,input2);
total.Dump("Rtf");
}
И это будет ваш вывод:
{\ rtf1 \ ansi \ ansicpg1250 \ deff0 \ deflang1029 {\ fonttbl {\ f0 \ fnil \ fcharset238 Tahoma;} {\ f1 \ fnil \ fcharset0 Arial;} {\ f2 \ fnil Arial;}} {\ colortbl; \ red0 \ green0 \ blue0;} \ viewkind4 \ uc1 \ pard \ f0 \ fs16 St \ 'f8edisko 222, ppokji \' 9a \ '9dovna Wustenrot PU 15.20022.0037626 \ par Платба на фактуру, p \ 'f8epolsat na poji \' 9a \ '9dovnu a pln \' ecn \ 'ed na \' fa \ 'e8et klienta. \ par \' c8 \ 'edsklo \' fa \ 'e8tu bude dod \' e1no \ par \ pard \ sa50 \ cf1 \ lang0 \ f1 \ fs18 При демоне \ 'e1 \' 9ei li \ '9aty LZ dver \' ed zji \ '9atena vada lakov \' e1n \ 'ed. \ f2 \ par \ pard \ cf0 \ lang1029 \ f0 \ fs16 \ par}
Обратите внимание, что fonttbl содержит только Tahoma и Arial в конечном выводе. Дополнительные шрифты, которые присутствуют в input2, не сохраняются, поскольку для текста в Rtf, найденного в переменной input2, выбран только шрифт Arial.