ImageGear .NET v25.2 - Updated
Developer Guide / How to Work with... / Common Operations / Printing
In This Topic
    Printing
    In This Topic

    This topic provides information about the following:

    Printing with Standard Windows Controls

    The following example demonstrates using the System.Windows.Controls.Canvas class and how to have a function that can print different file types, (images, PDF, CAD, etc.). This is done by loading the file in an ImGearPage, drawing the ImGearPage to a new Canvas, then printing that Canvas.

    C#
    Copy Code
    using System.Printing;
    using System.Windows.Controls;
    using System.Drawing.Printing;
    
    using ImageGear.Core;
    using ImageGear.Formats;
    using ImageGear.Vector;
     
    public void PrintPage()
    {
         ImGearPage pageToPrint = null;
         SaveFileDialog dialog = new SaveFileDialog();
     
         // Run the dialog and load a file into the ImGearPage, pageToPrint.
         if (dialog.ShowDialog(this) == DialogResult.OK)
         {
              Stream stream = new FileStream(dialog.FileName, FileMode.Open, FileAccess.Read);
              pageToPrint = ImGearFileFormats.LoadPage(stream, 0);
         }
     
         System.Windows.Controls.PrintDialog pDialog = new System.Windows.Controls.PrintDialog();
         if (pDialog.ShowDialog() == true)
         {
              // Set up scale settings.
              ImGearRenderSettings rs = new ImGearRenderSettings();
    
              // Use native scale settings. Provide specific resolution.
              ImGearNativeDisplayScaleSettings settings = new ImGearNativeDisplayScaleSettings();
              System.Printing.PrintTicket pt = pDialog.PrintTicket;
              rs.ImageScaleSettings = settings;
              Canvas printCanvas = new Canvas();
    
              // Set up Display settings to print whole image.                                                     
              ImGearPresentationPageDisplay pageDisplay = new ImGearPresentationPageDisplay(pageToPrint);
              pageDisplay.Layout.FitMode = ImGearFitModes.FIT_TO_DEVICE;
                   
              // printCanvas.Width, printCanvas.Height must be set before pageDisplay.DrawToCanvas, when printing without a pageView.
              printCanvas.Width = pDialog.PrintableAreaWidth;
              printCanvas.Height = pDialog.PrintableAreaHeight;
                   
              // Draw the image on the printCanvas.
              pageDisplay.DrawToCanvas(printCanvas, rs);
                   
              // Measure and arrange canvas.
              printCanvas.Measure(new System.Windows.Size(pDialog.PrintableAreaWidth, pDialog.PrintableAreaHeight));
              printCanvas.Arrange(new Rect(printCanvas.DesiredSize));
     
              // Print the canvas.
              pDialog.PrintVisual(printCanvas, "Print ImageGear page");
         }
    }
    
    VB.NET
    Copy Code
    Imports System.Printing
    Imports System.Windows.Controls
    Imports System.Drawing.Printing
     
    Imports ImageGear.Core
    Imports ImageGear.Formats
    Imports ImageGear.Vector
     
    Public Sub PrintPage()
         Dim pageToPrint As ImGearPage = Nothing
         Dim dialog As New SaveFileDialog()
     
         ' Run the dialog and load a file into the ImGearPage, pageToPrint.
         If dialog.ShowDialog(Me) = DialogResult.OK Then
              Dim stream As Stream = New FileStream(dialog.FileName, FileMode.Open, FileAccess.Read)
              pageToPrint = ImGearFileFormats.LoadPage(stream, 0)
         End If
     
         Dim pDialog As New System.Windows.Controls.PrintDialog()
         If pDialog.ShowDialog() = True Then
              ' Set up scale settings.
              Dim rs As New ImGearRenderSettings()
                            
              ' Use native scale settings. Provide specific resolution.
              Dim settings As New ImGearNativeDisplayScaleSettings()
              Dim pt As System.Printing.PrintTicket = pDialog.PrintTicket
              rs.ImageScaleSettings = settings
              Dim printCanvas As New Canvas()
                            
              ' Set up Display settings to print whole image.                                                     
              Dim pageDisplay As New ImGearPresentationPageDisplay(pageToPrint)
              pageDisplay.Layout.FitMode = ImGearFitModes.FIT_TO_DEVICE
                            
              ' printCanvas.Width, printCanvas.Height must be set before pageDisplay.DrawToCanvas, when printing without a pageView.
              printCanvas.Width = pDialog.PrintableAreaWidth
              printCanvas.Height = pDialog.PrintableAreaHeight
                            
              ' Draw the image on the printCanvas.
              pageDisplay.DrawToCanvas(printCanvas, rs)
                            
              ' Measure and arrange canvas.
              printCanvas.Measure(New System.Windows.Size(pDialog.PrintableAreaWidth, pDialog.PrintableAreaHeight))
              printCanvas.Arrange(New Rect(printCanvas.DesiredSize))
     
              ' Print the canvas.
              pDialog.PrintVisual(printCanvas, "Print ImageGear page")
         End If
    End Sub
    

    Be sure to add the required references to your project for the formats you are printing.

    The above snippet uses Native Scaling. More information on Native Scaling and WPF scaling can be found here:

    Printing with ImageGear .NET API

    The following example demonstrates how to print using the ImGearPageDisplay.Print method. This method draws the image on .NET graphics for printing.

    C#
    Copy Code
    using System.Printing;
    using System.Windows.Controls;
    using System.Drawing.Printing; 
    
    using ImageGear.Core;
    using ImageGear.Formats;
    using ImageGear.Vector;
    
    private void PrintPage(object sender, EventArgs e)
    {
         // Load an image.
         ImGearPage igPage;
         using (FileStream localFile = new FileStream("test1.tif", FileMode.Open))
         {
             igPage = ImGearFileFormats.LoadPage(localFile, 0);
         }
         
         // Create a new ImGearPageDisplay based upon an ImGearPage.
         ImGearPageDisplay igPageDisplay = new ImGearPageDisplay(igPage);
         
         // Set the current ImGearPageView to use this new display.
         imGearPageView.Display = igPageDisplay;
         
         // Initialize a PrintDialog for the user to select a printer.
         using (PrintDocument document = new PrintDocument())
         using (PrintDialog printDialog = new PrintDialog())
         {
             printDialog.Document = document;
             
             // Set the page range to 1 page.
             printDialog.AllowSomePages = true;
             printDialog.PrinterSettings.MinimumPage = 1;
             printDialog.PrinterSettings.MaximumPage = 1;
             printDialog.PrinterSettings.FromPage = 1;
             printDialog.PrinterSettings.ToPage = 1;
            
             if (DialogResult.OK == printDialog.ShowDialog(this))
             {
                 // Set a name for the print job.
                 document.DocumentName = this.Text;
                 
                 // Define a PrintPage event handler and start printing.
                 document.PrintPage +=
                     new PrintPageEventHandler(HandlePrinting);
                 document.Print();
             }
         }
     }
    
     void HandlePrinting(object sender, PrintPageEventArgs args)
     {
         // Clone the current Display for use as a printing display.
         ImGearPageDisplay igPageDisplayPrinting = imGearPageView.Display.Clone();
         igPageDisplayPrinting.Page = imGearPageView.Display.Page;
         
         // Get the current Zoom settings and disabled fixed zoom.
         ImGearZoomInfo igZoomInfo = igPageDisplayPrinting.GetZoomInfo(imGearPageView);
         igZoomInfo.Horizontal.Fixed = igZoomInfo.Vertical.Fixed = false;
         igPageDisplayPrinting.UpdateZoomFrom(igZoomInfo);
         
         // Disable any background before printing.
         igPageDisplayPrinting.Background.Mode = ImGearBackgroundModes.NONE;
         
         // Print to the Graphics device chosen from the PrintDialog.
         igPageDisplayPrinting.Print(args.Graphics);
         
         // Let the PrintDialog know there are no more pages.
         args.HasMorePages = false;
     }
    
    VB.NET
    Copy Code
    Imports System.Printing
    Imports System.Windows.Controls
    Imports System.Drawing.Printing
     
    Imports ImageGear.Core
    Imports ImageGear.Formats
    Imports ImageGear.Vector
     
    Private Sub PrintPage(sender As Object, e As EventArgs)
    
         ' Load an image
         Dim igPage As ImGearPage
         Using localFile As New FileStream("test1.tif", FileMode.Open)
              igPage = ImGearFileFormats.LoadPage(localFile, 0)
         End Using
    
         ' Create a new ImGearPageDisplay based upon an ImGearPage.
         Dim igPageDisplay As New ImGearPageDisplay(igPage)
    
         ' Set the current ImGearPageView to use this new display.
         imGearPageView.Display = igPageDisplay
    
         ' Initialize a PrintDialog for the user to select a printer.
         Using document As New PrintDocument()
              Using printDialog As New PrintDialog()
                   printDialog.Document = document
    
                   ' Set the page range to 1 page.
                   printDialog.AllowSomePages = True
                   printDialog.PrinterSettings.MinimumPage = 1
                   printDialog.PrinterSettings.MaximumPage = 1
                   printDialog.PrinterSettings.FromPage = 1
                   printDialog.PrinterSettings.ToPage = 1
     
                   If DialogResult.OK = printDialog.ShowDialog(Me) Then
    
                        ' Set a name for the print job.
                        document.DocumentName = Me.Text
    
                        ' Define a PrintPage event handler and start printing.
                        document.PrintPage += New PrintPageEventHandler(AddressOf HandlePrinting)
                        document.Print()
                   End If
              End Using
         End Using
    End Sub
     
    Private Sub HandlePrinting(sender As Object, args As PrintPageEventArgs)
    
         ' Clone the current Display for use as a printing display.
         Dim igPageDisplayPrinting As ImGearPageDisplay = imGearPageView.Display.Clone()
         igPageDisplayPrinting.Page = imGearPageView.Display.Page
    
         ' Get the current Zoom settings and disabled fixed zoom.
         Dim igZoomInfo As ImGearZoomInfo = igPageDisplayPrinting.GetZoomInfo(imGearPageView)
         igZoomInfo.Horizontal.Fixed = InlineAssignHelper(igZoomInfo.Vertical.Fixed, False)
         igPageDisplayPrinting.UpdateZoomFrom(igZoomInfo)
    
         ' Disable any background before printing.
         igPageDisplayPrinting.Background.Mode = ImGearBackgroundModes.NONE
    
         ' Print to the Graphics device chosen from the PrintDialog.
         igPageDisplayPrinting.Print(args.Graphics)
    
         ' Let the PrintDialog know there are no more pages.
         args.HasMorePages = False
    End Sub
    

    Printing a PDF Document

    Native PDF document printing renders the document directly to the printer; it’s fast and requires less memory. The following is an example that demonstrates how to print a PDF with the ImGearPDFDocument.Print() method.

    C#
    Copy Code
    using System.Drawing.Printing;
    
    using ImageGear.Core;
    using ImageGear.Formats;
    using ImageGear.Formats.PDF;
    
    public void PrintPDF(ImGearDocument igDocument)
    {
         using (ImGearPDFDocument igPDFDocument = (ImGearPDFDocument)igDocument)
         {
              ImGearPDFPrintOptions printOptions = new ImGearPDFPrintOptions();
              PrintDocument printDocument = new PrintDocument();
                 
              // Use default Windows printer.
              printOptions.DeviceName = printDocument.PrinterSettings.PrinterName;
                 
              // Print all pages.
              printOptions.StartPage = 0;
              printOptions.EndPage = igDocument.Pages.Count;
              igPDFDocument.Print(printOptions);
         }
         return;
    }
    
    VB.NET
    Copy Code
    Imports System.Drawing.Printing
     
    Imports ImageGear.Core
    Imports ImageGear.Formats
    Imports ImageGear.Formats.PDF
     
    Public Sub PrintPDF(igDocument As ImGearDocument)
         Using igPDFDocument As ImGearPDFDocument = DirectCast(igDocument, ImGearPDFDocument)
              Dim printOptions As New ImGearPDFPrintOptions()
              Dim printDocument As New PrintDocument()
                            
              ' Use default Windows printer.
              printOptions.DeviceName = printDocument.PrinterSettings.PrinterName
    
              ' Print all pages.
              printOptions.StartPage = 0
              printOptions.EndPage = igDocument.Pages.Count
              igPDFDocument.Print(printOptions)
         End Using
         Return
    End Sub
    

    The .NET reference System.Drawing.dll is required for this snippet.

    See Also

    ImageGear.Formats.Pdf AssemblyImageGear.Formats.PDF NamespaceImGearPDFPrintOptions Class

    ImageGear.Twain AssemblyImageGear.TWAIN NamespaceImGearPrinter Enumeration

    ImageGear.Wpf AssemblyImageGear.WPF.XPS NamespaceImGearXPSDocument ClassPrint Method

    ImageGear.Web.UI LibraryImageGear.Web.UI_namespaceImageGear.Web.UI.PageViewshowPrintDialog Method

    ImageGear.Web.UI LibraryImageGear.Web.UI_namespaceImageGear.Web.UI.PageViewprint Method