officefileapi-405741-word-processing-document-api-examples-printing-how-to-use-printing-library.md
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:
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);
}
}
}
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