Printing a Document Programmatically or Using Dialogs

This article describes how to print a word processing document from an ASP.NET or Windows Service application using Aspose.Words and the XpsPrint API. It also demonstrates the methods of printing a document with Settings, Print preview, and Print progress dialogs, and explains how to reduce the time of the first call to print a document.

Printing a Document on a Server via the XpsPrint API

Thissection is intended for users who want to submit an XPS document to the unmanagedXpsPrint APIfrom a .NET application using Aspose.Words.

Limitations of printing a document in theASP.NET or Windows Service applications

When developing a .NET application that produces some printed output, you can typically use classes provided in the System.Drawing.Printing namespace, or Windows Presentation Foundation (WPF) classes. However, if the application is an ASP.NET or Windows Service application, the options for printing are limited, because Microsoft discourages using this approach.The .NET Framework Printing classes are not supported by services application. This includes ASP pages, which generally run in the context of the server service.

The classes within the System.Drawing.Printing namespace are not supported for use within a Windows service or an ASP.NET application or service, and attempting their use may produce decreased service performance, run-time exceptions, and other issues.The use of WPF to build Windows services is likewise not supported. Since WPF is a presentation technology, the Windows service requires appropriate permissions to perform visual operations involving user interaction. If the Windows service does not have such permissions, there may be unexpected results.

TheAspose.WordsDocumentobject provides a family ofPrintmethods to print documents. These methods use the .NET printing classes defined in theSystem.Drawing.Printingnamespace. There are many Aspose.Words customers who successfully utilize them for printing in their server-side applications. Nevertheless, this article demonstrates an alternative method for printing that is compliant with Microsoft’s recommendations.

Methods to Print a Document on a Server

The proper way to print documents according to Microsoft is by using the unmanagedXpsPrint API. This API is available on Windows 7, Windows Server 2008 R2, and on Windows Vista provided thePlatform Update for Windows Vistais installed.

Since Aspose.Words can easily convert any document to XPS, you only need to write the code that passes an XPS document to the XpsPrint API. The only problem is that the XpsPrint API is unmanaged and requires some knowledge of the Platform Invoke technology.

To print a document, Aspose.Words provides anXpsPrintHelperclass contains a simple Print method, where you just need to specify the following parameters (see more details in the article Print Document via XPS API):

  • Document you want to print.
  • Printer name.
  • Job name (optional).
  • Boolean value, specifying whether the program should wait until the print job is completed. Therefore, the system will either check whether the document was printed successfully or return immediately after sending the print job. In the last case, it is impossible to identify whetherthe print job was successful.

Upon encountering any problems submitting or printing the document, the method will throw an exception.

The code example below shows how to print a document using theXpsPrintHelperclass:

When you run the project, it prints a sample document on the specified printer and opens a console window to display print results. When the print job completes or errors out, the system will display a success message or text of the thrown exception.

You can also set some print settings using thePageSetupclass. For example, in Microsoft Word, printer trays are defined for each section and are printer-specific. Therefore, you can programmatically change these values for each section via theFirstPageTrayandOtherPagesTrayproperties.

There are two overloads of theXpsPrintHelper.Printmethod. The first overload takes aDocumentobject and saves it into a MemoryStream in the XPS format. The second overload accepts a Stream object. The stream must contain a document in the XPS format.

You can download the examples of method overloading from Aspose.Words GitHub.

You can download the sample file of this example from Aspose.Words GitHub.

Printing a Document with Settings and Print Preview Dialogs

When working with documents, it is often required to print them to a selected printer. It is helpful to utilize a print preview dialog to visually inspect how the printed document will appear and choose relevant print options.

The Aspose.Words has no built-in dialogs or forms but implements theAsposeWordsPrintDocumentclass, based on the .NETPrintDocumentclass. An instance of this class can be passed to thePrintPreviewDialogform to preview and print the document. Also, thePrintPreviewDialogclass defines the output to transmit to a printer.

The following example shows how to use these classes to print a document from Aspose.Words via the Print preview and Settings dialogs:

To optimize the appearance of Print Preview dialog settings, specify properties of thePrintPreviewDialogclass.

Printing Multiple Pages on One Sheet

It is always beneficial to have more flexibility when printing documents. Using .NET and Aspose.Words you can easily fine-tune the printing operation to implement your custom logic by defining the way the document will appear on the printed page.

As in the previous section, Aspose.Words implements theMultipagePrintDocumentclass, which is based on the .NETPrintDocumentclass. This means that the existing .NET printing infrastructure can be used in such a way that the print and print preview dialogs would enable visualizing of the document before printing. TheMultipagePrintDocumentclass provides the ability to print several pages on one sheet of paper.

The result of this code example is shown below:

print-a-document-programmatically-or-using-dialogs-aspose-words-net

Hiding the Print Progress Dialog When Printing a Document

The Printing Progress Dialog does not appear when printing a document via thePrintmethod. However, this dialog appears during printing with anotherPrintmethod.In this case, to prevent the Printing dialog from appearing, you should specify valid printer settings and a standard print controller in this method, as shown in the example below:

You can download the sample file of this examplefromAspose.Words GitHub.

How to Reduce the Time of the First Call to Print a Document

Aspose.Words reads and caches some fields ofPrinterSettingsto reduce printing time. You can achieve this by calling theCachePrinterSettingsmethod. This method is called before the printing starts if it was not executed previously. Note that the total time of printing with and without calling of this method is almost the same. The purpose of using this method is to reduce the time of thefirst call of thePrintmethod.The following code example shows how to use this method:

See Also