2013-05-09 48 views
0

我被要求创建一个读入rtf文件并在零件中显示文件的控件。我遇到的问题是,字体样式似乎存储在比我抽出的片段更高的级别。有没有办法从一个文件中读取片段并保持格式化?我在WPF中使用RichTextbox。如何读取RTF文件的部分并保持格式化

回答

0

这不是一个完美的解决方案,但它适用于我的特定场景。我发布它以防万一以后帮助其他人,但我仍在寻找更好的解决方案。对于下面的工作,它有两个先决条件:

  • 我的分隔符必须是在文本的开头和结尾
  • 我的分隔符必须是不同的字体或样式,以便它有它的从周围的任何文字独特的标记

代码:

private static IEnumerable<String> GetListFromDelimitedText(String text) 
{ 
    var textSplit = text.Split(new[] { "~~~~~~~~" }, StringSplitOptions.None); 

    var header = GetHeaderOfRtf(textSplit); 
    var footer = GetFooterOfRtf(textSplit); 
    var listWithoutHeaderAndFooter = 
    textSplit.Where((text, index) => index > 0 && index < textSplit.Length - 1); 
    return GetSnippetsWithHeaderAndFooter(listWithoutHeaderAndFooter, header, footer); 
} 

private static IEnumerable<String> GetSnippetsWithHeaderAndFooter(IEnumerable<String> snippetList, String header, String footer) 
{ 
    return snippetList.Select(text => 
    { 
     var textWithoutLeadingBracket = text.Substring(text.IndexOf('}') + 1); 
     var cleanedText = textWithoutLeadingBracket.Substring(0, textWithoutLeadingBracket.LastIndexOf('{')); 
     return header + cleanedText + footer; 
    } 
); 
} 

private static string GetFooterOfRtf(IEnumerable<String> textSplit) 
{ 
    var lastSplit = textSplit.Last(); 
    return lastSplit.Substring(lastSplit.IndexOf('}') + 1); 
} 

private static string GetHeaderOfRtf(IEnumerable<String> textSplit) 
{ 
    var firstSplit = textSplit.First(); 
    return firstSplit.Substring(0, firstSplit.LastIndexOf('{')); 
} 
相关问题