ARTICLE

Viewing Word Documents in WPF using VB.NET

Posted by Mahesh Chand Articles | WPF using VB.NET September 26, 2009
WPF does not support functionality to view Microsoft Word documents but there is a work around this problem. This article demonstrates how to view a word document in WPF using DocumentViewer control using VB.NET.
Download Files:
 
Reader Level:

WPF does not support functionality to view Microsoft Word documents but there is a work around this problem. WPF DocumentViewer control is used to display fixed documents such as an XPS (XML Paper Specification) document. We can open a Word document if we can convert a Word document to an XPS document. This conversion is possible by using Office Interop and Office Tools frameworks that is used to work with Office documents.

Add Reference to XPS and Office Interop Assemblies

Before we do any actual work, we must add reference to the following assemblies.

    *  ReachFramework.dll
    * Microsoft.Office.Tools.v9.0.dll
    * Microsoft.Office.Tools.Word.v9.0dll
    * Microsoft.VisualStudio.Tools.Office.Runtime.v9.0.dll
    * Microsoft.Office.Interop.Word.dll

The first assembly, ReachFramework.dll hosts the functionality for XPS documents and rest of the assemblies hosts the functionality Office Interop and Office Tools support.

Note: You must also install 2007 Microsoft Office Add-in: Microsoft Save as PDF or XPS that you can download using the following link. http://www.microsoft.com/downloads/details.aspx?FamilyID=4d951911-3e7e-4ae6-b059-a2e79ed87041&displaylang=en

To add reference to these assemblies, you right click on Add Reference on the project name in Solution Explorer. On the .NET Framework, select ReachFramework and other assemblies from the list and click OK button. Figure 1 shows ReachFramework in Add Reference dialog.

Word2XpsImg1.gif

Figure 1

 You may have multiple assemblies installed on your machine. Make sure you select Version 12 for Microsoft.Office.Interop.Word assemblies as you see in Figure 2, otherwise your conversion will fail.

Word2XpsImg2.gif

Figure 2

Once you have added the reference to assemblies, you must import the following namespaces to your code behind. 

Imports System.IO

Imports Microsoft.Office.Interop.Word

Imports Microsoft.Win32

Imports System.Windows.Xps.Packaging

Convert Doc to XPS

The SaveAs method of Document class available in OfficeInterop allows us to save a word document as an XPS document. However, you must make sure you have version 12 of assembly added to your project as I mentioned before.

The ConvertWordDocToXPSDoc method takes a full path of a word document file and new full path of XPS document and converts doc file to an xps file.


Private Sub BrowseButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)

 

        ' Create OpenFileDialog

        Dim dlg As Microsoft.Win32.OpenFileDialog = New Microsoft.Win32.OpenFileDialog()

 

        ' Set filter for file extension and default file extension

        dlg.DefaultExt = ".doc"

        dlg.Filter = "Word documents (.doc)|*.doc"

 

        If (dlg.ShowDialog() = True) Then

            Dim fileName As String = dlg.FileName

            If (dlg.FileName.Length > 0) Then

                SelectedFileTextBox.Text = dlg.FileName

 

                Dim newXPSDocumentName As String =

                    String.Concat(System.IO.Path.GetDirectoryName(dlg.FileName), "\", _

                                          System.IO.Path.GetFileNameWithoutExtension(dlg.FileName), ".xps")

                documentViewer1.Document =

                              ConvertWordDocToXPSDoc(dlg.FileName, newXPSDocumentName).GetFixedDocumentSequence()

 

            End If

        End If

    End Sub


XPS Viewer Application

Let's create a WPF Application using Visual Studio 2010 and add a TextBox

, Button, and a DocumentViewer. Here is XAML code looks like.

<Grid>

    <DocumentViewer HorizontalAlignment="Left" Margin="0,42,0,0"

                    Name="documentViewer1" VerticalAlignment="Top" Height="508" Width="766" />

    <TextBox Height="29" HorizontalAlignment="Left" Margin="6,6,0,0"

             Name="SelectedFileTextBox" VerticalAlignment="Top" Width="276" />

    <Button Content="Browse" Height="30" HorizontalAlignment="Right" Margin="0,6,353,0"

            Name="BrowseButton" VerticalAlignment="Top" Width="122" Click="BrowseButton_Click" />

</Grid>

The application looks like Figure 3 where Browse button is used to browse word documents on your machine.

Word2XpsImg3.gif

Figure 3

The Browse button click event handler code looks like this where we convert a word document to an XPS document and view that in a DocumentViewer control.

Private Function ConvertWordDocToXPSDoc(ByVal wordDocName As String, ByVal xpsDocName As String) As XpsDocument

 

        Dim xpsDoc As XpsDocument

        ' Create a WordApplication and add Document to it

        Dim wordApplication As Microsoft.Office.Interop.Word.Application = New Microsoft.Office.Interop.Word.Application()

        wordApplication.Documents.Add(wordDocName)

 

        Dim doc As Document = wordApplication.ActiveDocument

        ' You must make sure you have Microsoft.Office.Interop.Word.Dll version 12.

        ' Version 11 or previous versions do not have WdSaveFormat.wdFormatXPS option

        Try

            doc.SaveAs(xpsDocName, WdSaveFormat.wdFormatXPS)

            wordApplication.Quit()

 

            xpsDoc = New XpsDocument(xpsDocName, System.IO.FileAccess.Read)

            Return xpsDoc

        Catch ex As Exception

 

        End Try

 

        Return Nothing

    End Function 

 

 

Run the Application

Just run your application, click the Browse button, select a word document and your output will look like Figure 4.

 

Word2XpsImg4.gif

Figure 4

share this article :
post comment
 

Hi Mahesh, It was really good article, thanks tou you. I need to edit and save it that selected file. Is there option to do like that ??

Posted by Maruthi Vara Prasad Jul 10, 2011

Yes I have used .NET 4.0.

Posted by Mahesh Chand Nov 04, 2009

I can only get a references to ReachFramework 3.0, not the 4.0 you have in your image

Posted by b Oct 01, 2009

I need to load and view Word 2003 documents, in read only mode...now what...

Posted by b Oct 01, 2009
Team Foundation Server Hosting
Become a Sponsor
PREMIUM SPONSORS
  • ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications. Visit DynamicPDF here
    Get 2 Months Free of ASP.NET Hosting for Only $4.95/month! Receive FREE MS SQL and MySQL Databases Including ASP.NET 4/3.5, MVC 3.0, Silverlight 4, Windows 2008/IIS 7.0 Plus FREE IIS 7 Modules. Host UNLIMITED ASP.NET Web Sites - Click Here!
Nevron Diagram
Become a Sponsor