Back to Devexpress

How to: Use DevExpress Printing Library to Print Word Documents

officefileapi-405741-word-processing-document-api-examples-printing-how-to-use-printing-library.md

latest6.2 KB
Original Source

How to: Use DevExpress Printing Library to Print Word Documents

  • Jan 16, 2026
  • 3 minutes to read

Use the DevExpress Printing Library to set options that are unavailable from RichEditDocumentServer directly. The PrintableComponentLinkBase class from this library allows you to change print settings (for example, use a specific printer or disable error messages).

The Margins, PageHeaderFooter, PaperKind properties do not affect the printed document’s layout. Change a document section settings (accessible by the Section.Page property) to modify the page layout properties before printing.

The following code snippet changes document layout settings and prints a document with the specified printer:

View Example

csharp
using DevExpress.XtraPrinting;
using DevExpress.XtraPrintingLinks;
using DevExpress.XtraRichEdit;
using DevExpress.XtraRichEdit.API.Native;
using System;
using DevExpress.Drawing.Printing;
using System.Windows.Forms;

private void btn_PrintFromServer_Click(object sender, EventArgs e)
{
    using (RichEditDocumentServer wordProcessor = new RichEditDocumentServer())
    {
        wordProcessor.LoadDocument("Grimm.docx");

        // Specify page layout settings.
        SetPrintOptions(wordProcessor);
        wordProcessor.EndUpdate();

        // Create a printable link to print a document.
        PrintWithLink(wordProcessor);
    }
}
private static void SetPrintOptions(IRichEditDocumentServer richEdit)
{
    foreach (Section _section in richEdit.Document.Sections)
    {
        _section.Page.PaperKind = DXPaperKind.A4;
        _section.Page.Landscape = false;
        _section.Margins.Left = 150f;
        _section.Margins.Right = 150f;
        _section.Margins.Top = 50f;
        _section.Margins.Bottom = 50f;
        _section.PageNumbering.NumberingFormat = NumberingFormat.CardinalText;
        _section.PageNumbering.FirstPageNumber = 0;
    }
}
private static void PrintWithLink(RichEditDocumentServer wordProcessor)
{
    if (!wordProcessor.IsPrintingAvailable) return;
    using (PrintingSystemBase ps = new PrintingSystemBase()) {
        using (PrintableComponentLinkBase link = new PrintableComponentLinkBase(ps)) {
            link.Component = wordProcessor;

            // Disable warnings.
            ps.ShowMarginsWarning = false;
            ps.ShowPrintStatusDialog = false;

            // Find a printer containing 'PDF' in its name.
            string printerName = String.Empty;
            for (int i = 0; i < PrinterSettings.InstalledPrinters.Count; i++)
            {
                string pName = PrinterSettings.InstalledPrinters[i];
                if (pName.Contains("PDF"))
                {
                    printerName = pName;
                    break;
                }
            }

            // Run document creation
            link.CreateDocument();

            // Print to the specified printer.
            PrintToolBase tool = new PrintToolBase(ps);
            tool.Print(printerName);
        }
    }
}
vb
Imports DevExpress.XtraPrinting
Imports DevExpress.XtraPrintingLinks
Imports DevExpress.XtraRichEdit
Imports DevExpress.XtraRichEdit.API.Native
Imports System
Imports DevExpress.Drawing.Printing
Imports System.Windows.Forms

Private Sub btn_PrintFromServer_Click(ByVal sender As Object, ByVal e As EventArgs)
    Using wordProcessor As New RichEditDocumentServer()
        wordProcessor.LoadDocument("Grimm.docx")

        ' Insert a field with the current date/time into the document header.
        wordProcessor.BeginUpdate()
        Dim _header As SubDocument = wordProcessor.Document.Sections(0).BeginUpdateHeader()
        _header.Fields.Create(_header.Range.Start, "DATE \@ ""dddd, MMMM dd, yyyy HH:mm:ss"" \MERGEFORMAT")
        _header.Paragraphs(0).Alignment = ParagraphAlignment.Right
        wordProcessor.Document.Sections(0).EndUpdateHeader(_header)

        ' Specify page layout settings.
        SetPrintOptions(wordProcessor)
        wordProcessor.EndUpdate()

        ' Display field values instead of code.
        wordProcessor.Options.MailMerge.ViewMergedData = True

        ' Create a printable link to print a document.
        PrintWithLink(wordProcessor)
    End Using
End Sub

Private Shared Sub SetPrintOptions(ByVal richEdit As IRichEditDocumentServer)
    For Each _section As Section In richEdit.Document.Sections
        _section.Page.PaperKind = DXPaperKind.A4
        _section.Page.Landscape = False
        _section.Margins.Left = 150F
        _section.Margins.Right = 150F
        _section.Margins.Top = 50F
        _section.Margins.Bottom = 50F
        _section.PageNumbering.NumberingFormat = NumberingFormat.CardinalText
        _section.PageNumbering.FirstPageNumber = 0
    Next _section
End Sub

Private Shared Sub PrintWithLink(ByVal wordProcessor As RichEditDocumentServer)
    If Not wordProcessor.IsPrintingAvailable Then
        Return
    End If
    Using ps As New PrintingSystemBase()
        Using link As New PrintableComponentLinkBase(ps)
        link.Component = wordProcessor

        ' Disable warnings.
        ps.ShowMarginsWarning = False
        ps.ShowPrintStatusDialog = False

        ' Find a printer containing 'PDF' in its name.
        Dim printerName As String = String.Empty
        For i As Integer = 0 To PrinterSettings.InstalledPrinters.Count - 1
            Dim pName As String = PrinterSettings.InstalledPrinters(i)
            If pName.Contains("PDF") Then
                printerName = pName
                Exit For
            End If
        Next i

        ' Run document creation
        link.CreateDocument()

        ' Print to the specified printer.
        Dim tool As New PrintToolBase(ps)
        tool.Print(printerName)
        End Using
    End Using
End Sub