2013-05-09 1 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('{')); 
} 
관련 문제