You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
3.4 KiB
96 lines
3.4 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Documents;
|
|
|
|
namespace GummingCommon
|
|
{
|
|
public class RtfToHtmlConverter
|
|
{
|
|
private const string FlowDocumentFormat = "<FlowDocument>{0}</FlowDocument>";
|
|
|
|
public static string ConvertRtfToHtml(string rtfText)
|
|
{
|
|
var xamlText = string.Format(FlowDocumentFormat, ConvertRtfToXaml(rtfText));
|
|
|
|
return HtmlFromXamlConverter.ConvertXamlToHtml(xamlText, false);
|
|
}
|
|
|
|
private static string ConvertRtfToXaml(string rtfText)
|
|
{
|
|
RichTextBox richTextBox = new RichTextBox();
|
|
if (string.IsNullOrEmpty(rtfText)) return "";
|
|
|
|
var textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
|
|
|
|
//Create a MemoryStream of the Rtf content
|
|
|
|
using (var rtfMemoryStream = new MemoryStream())
|
|
{
|
|
using (var rtfStreamWriter = new StreamWriter(rtfMemoryStream))
|
|
{
|
|
rtfStreamWriter.Write(rtfText);
|
|
rtfStreamWriter.Flush();
|
|
rtfMemoryStream.Seek(0, SeekOrigin.Begin);
|
|
|
|
//Load the MemoryStream into TextRange ranging from start to end of RichTextBox.
|
|
textRange.Load(rtfMemoryStream, DataFormats.Rtf);
|
|
}
|
|
}
|
|
|
|
using (var rtfMemoryStream = new MemoryStream())
|
|
{
|
|
textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
|
|
textRange.Save(rtfMemoryStream, DataFormats.Xaml);
|
|
rtfMemoryStream.Seek(0, SeekOrigin.Begin);
|
|
using (var rtfStreamReader = new StreamReader(rtfMemoryStream))
|
|
{
|
|
return rtfStreamReader.ReadToEnd();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public static string ConvertRtfToPlainText(string rtfText)
|
|
{
|
|
|
|
RichTextBox richTextBox = new RichTextBox();
|
|
if (string.IsNullOrEmpty(rtfText)) return "";
|
|
|
|
var textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
|
|
|
|
//Create a MemoryStream of the Rtf content
|
|
|
|
using (var rtfMemoryStream = new MemoryStream())
|
|
{
|
|
using (var rtfStreamWriter = new StreamWriter(rtfMemoryStream))
|
|
{
|
|
rtfStreamWriter.Write(rtfText);
|
|
rtfStreamWriter.Flush();
|
|
rtfMemoryStream.Seek(0, SeekOrigin.Begin);
|
|
|
|
//Load the MemoryStream into TextRange ranging from start to end of RichTextBox.
|
|
textRange.Load(rtfMemoryStream, DataFormats.Rtf);
|
|
}
|
|
}
|
|
|
|
using (var rtfMemoryStream = new MemoryStream())
|
|
{
|
|
textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
|
|
textRange.Save(rtfMemoryStream, DataFormats.Text);
|
|
rtfMemoryStream.Seek(0, SeekOrigin.Begin);
|
|
using (var rtfStreamReader = new StreamReader(rtfMemoryStream))
|
|
{
|
|
return rtfStreamReader.ReadToEnd();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|