Click here to Skip to main content
15,886,798 members
Articles / Desktop Programming / WPF

Writing Your Own RTF Converter

Rate me:
Please Sign up or sign in to vote.
4.95/5 (234 votes)
1 Aug 2013CPOL14 min read 2.4M   40.4K   632  
An article on how to write a custom RTF parser and converter.
<Window
	x:Class="Itenso.Solutions.Community.RtfConverter.RtfWindows.RtfWindow"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	Title="Rtf Converter for WPF"
	Height="400"
	Width="600"
	MinHeight="400"
	MinWidth="600">
	<Grid>
		<Grid.RowDefinitions>
			<RowDefinition
				Height="4*" />
			<RowDefinition
				Height="25" />
			<RowDefinition
				Height="4*" />
		</Grid.RowDefinitions>
		<RichTextBox
			Name="richTextBox"
			Grid.Row="0"
			Margin="2"
			HorizontalScrollBarVisibility="Auto"
			VerticalScrollBarVisibility="Auto">
			<FlowDocument>
				<Paragraph
					FontSize="18">Flow Format Example</Paragraph>

				<Paragraph>
					Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh 
      euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim 
      ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl 
      ut aliquip ex ea commodo consequat. Duis autem vel eum iriure.
				</Paragraph>

				<Paragraph
					FontSize="18">More flow elements</Paragraph>
				<Paragraph
					FontSize="15">Inline, font type and weight, and a List</Paragraph>

				<List>
					<ListItem>
						<Paragraph>ListItem 1</Paragraph>
					</ListItem>
					<ListItem>
						<Paragraph>ListItem 2</Paragraph>
					</ListItem>
					<ListItem>
						<Paragraph>ListItem 3</Paragraph>
					</ListItem>
					<ListItem>
						<Paragraph>ListItem 4</Paragraph>
					</ListItem>
					<ListItem>
						<Paragraph>ListItem 5</Paragraph>
					</ListItem>
				</List>

				<Paragraph>
					<Bold>Bolded</Bold>
				</Paragraph>
				<Paragraph>
					<Underline>Underlined</Underline>
				</Paragraph>
				<Paragraph>
					<Bold>
						<Underline>Bolded and Underlined</Underline>
					</Bold>
				</Paragraph>
				<Paragraph>
					<Italic>Italic</Italic>
				</Paragraph>

				<Paragraph>
					<Span>The Span element, no inherent rendering</Span>
				</Paragraph>
				<Paragraph>
					<Run>The Run element, no inherent rendering</Run>
				</Paragraph>

				<Paragraph
					FontSize="15">Subscript, Superscript</Paragraph>

				<Paragraph>
					<Run
						Typography.Variants="Superscript">This text is Superscripted.</Run> This text isn't.
				</Paragraph>
				<Paragraph>
					<Run
						Typography.Variants="Subscript">This text is Subscripted.</Run> This text isn't.
				</Paragraph>
				<Paragraph>
					If a font does not support a particular form (such as Superscript) a default font form will be displayed.
				</Paragraph>

				<Paragraph
					FontSize="15">Blocks, breaks, paragraph</Paragraph>

				<Section>
					<Paragraph>A block section of text</Paragraph>
				</Section>
				<Section>
					<Paragraph>Another block section of text</Paragraph>
				</Section>

				<Paragraph>
					<LineBreak />
				</Paragraph>
				<Section>
					<Paragraph>... and another section, preceded by a LineBreak</Paragraph>
				</Section>

				<Section
					BreakPageBefore="True" />
				<Section>
					<Paragraph>... and another section, preceded by a PageBreak</Paragraph>
				</Section>

				<Paragraph>Finally, a paragraph. Note the break between this paragraph ...</Paragraph>
				<Paragraph
					TextIndent="25">... and this paragraph, and also the left indention.</Paragraph>

				<Paragraph>
					<LineBreak />
				</Paragraph>

			</FlowDocument>
		</RichTextBox>
		<Grid
			Grid.Row="1">
			<Grid.ColumnDefinitions>
				<ColumnDefinition
					Width="1*" />
				<ColumnDefinition
					Width="1*" />
				<ColumnDefinition
					Width="1*" />
			</Grid.ColumnDefinitions>
			<Button
				Grid.Column="0"
				Margin="2 0"
				Click="ToTextButtonClick">To Text</Button>
			<Button
				Grid.Column="1"
				Margin="2 0"
				Click="ToXmlButtonClick">To Xml</Button>
			<Button
				Grid.Column="2"
				Margin="2 0"
				Click="ToHtmlButtonClick">To Html</Button>
		</Grid>

		<TextBox
			Name="textBox"
			Grid.Row="4"
			Margin="2"
			HorizontalScrollBarVisibility="Auto"
			VerticalScrollBarVisibility="Auto">
		</TextBox>
	</Grid>
</Window>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
Switzerland Switzerland
👨 Senior .NET Software Engineer

🚀 My Open Source Projects
- Time Period Library 👉 GitHub
- Payroll Engine 👉 GitHub

Feedback and contributions are welcome.



Comments and Discussions