WPF - RichTextBox to HTML using C# and VB.NET
Complete code
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WPF___RichTextBox_to_HTML
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// Insert RTF document into RichText Control.
string inpFile = @"..\..\example.rtf";
byte[] rtfBytes = File.ReadAllBytes(inpFile);
using (MemoryStream ms = new MemoryStream(rtfBytes))
{
System.Windows.Documents.TextRange tr = new System.Windows.Documents.TextRange(
rtfControl.Document.ContentStart, rtfControl.Document.ContentEnd);
tr.Load(ms, DataFormats.Rtf);
}
}
private void BtnConvert_Click(object sender, RoutedEventArgs e)
{
// Get RTF from RichTextBox
string rtfString = string.Empty;
using (MemoryStream ms = new MemoryStream())
{
TextRange range = new TextRange(rtfControl.Document.ContentStart, rtfControl.Document.ContentEnd);
range.Save(ms, DataFormats.Rtf);
ms.Seek(0, SeekOrigin.Begin);
using (StreamReader sr = new StreamReader(ms))
{
rtfString = sr.ReadToEnd();
}
}
// Convert RTF to HTML using SautinSoft.RtfToHtml.dll
string outFile = @"Result.html";
SautinSoft.RtfToHtml r = new SautinSoft.RtfToHtml();
// Specify some properties for output HTML document.
r.OutputFormat = SautinSoft.RtfToHtml.eOutputFormat.HTML_5;
r.Encoding = SautinSoft.RtfToHtml.eEncoding.UTF_8;
// Imagefolder must already exist.
r.ImageStyle.ImageFolder = System.Environment.CurrentDirectory;
// Subfolder for images will be created by the component.
r.ImageStyle.ImageSubFolder = "image.files";
// A template name for images.
r.ImageStyle.ImageFileName = "picture";
// false - store images as files on HDD,
// true - store images inside HTML document using base64.
r.ImageStyle.IncludeImageInHtml = false;
try
{
r.OpenRtf(rtfString);
r.ToHtml(outFile);
// Open the result for demonstration purposes.
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(outFile)
{ UseShellExecute = true });
}
catch (Exception ex)
{
MessageBox.Show($"Error: {ex.Message}");
}
}
}
}
Imports System
Imports System.IO
Class MainWindow
Private Sub BtnConvert_Click(sender As Object, e As RoutedEventArgs) Handles btnConvert.Click
' Get RTF from RichTextBox
Dim rtfString As String = String.Empty
Using ms As New MemoryStream()
Dim range As New TextRange(rtfControl.Document.ContentStart, rtfControl.Document.ContentEnd)
range.Save(ms, DataFormats.Rtf)
ms.Seek(0, SeekOrigin.Begin)
Using sr As New StreamReader(ms)
rtfString = sr.ReadToEnd()
End Using
End Using
' Convert RTF to HTML using SautinSoft.RtfToHtml.dll
Dim outFile As String = "Result.html"
Dim r As New SautinSoft.RtfToHtml()
' Specify some properties for output HTML document.
r.OutputFormat = SautinSoft.RtfToHtml.eOutputFormat.HTML_5
r.Encoding = SautinSoft.RtfToHtml.eEncoding.UTF_8
' Imagefolder must already exist.
r.ImageStyle.ImageFolder = Environment.CurrentDirectory
' Subfolder for images will be created by the component.
r.ImageStyle.ImageSubFolder = "image.files"
' A template name for images.
r.ImageStyle.ImageFileName = "picture"
' false - store images as files on HDD,
' true - store images inside HTML document using base64.
r.ImageStyle.IncludeImageInHtml = False
Try
r.OpenRtf(rtfString)
r.ToHtml(outFile)
' Open the result for demonstration purposes.
System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo(outFile) With {.UseShellExecute = True})
Catch ex As Exception
MessageBox.Show($"Error: {ex.Message}")
End Try
End Sub
Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs)
' Insert RTF document into RichText Control.
Dim inpFile As String = "..\..\example.rtf"
Dim rtfBytes() As Byte = File.ReadAllBytes(inpFile)
Using ms As New MemoryStream(rtfBytes)
Dim tr As New System.Windows.Documents.TextRange(rtfControl.Document.ContentStart, rtfControl.Document.ContentEnd)
tr.Load(ms, DataFormats.Rtf)
End Using
End Sub
End Class
<Window x:Class="WPF___RichTextBox_to_HTML.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPF___RichTextBox_to_HTML"
mc:Ignorable="d"
Title="WPF - RichTextBox to HTML using SautinSoft.RtfToHtml.dll"
WindowState="Maximized"
WindowStyle="SingleBorderWindow">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<RichTextBox Name="rtfControl" Grid.Row="0" Margin="2,10"></RichTextBox>
<Button Name="btnConvert" Grid.Row="1" Width="150" Height="28" Margin="5" Click="BtnConvert_Click">Convert to HTML</Button>
</Grid>
</Window>
If you are looking also for a .NET solution to Create or Modify HTML documents, see our Document .Net.
If you need a new code example or have a question: email us at support@sautinsoft.com or ask at Online Chat (right-bottom corner of this page) or use the Form below: