LEADTOOLS Windows Forms (Leadtools.WinForms assembly) Send comments on this topic. | Back to Introduction - All Topics | Help Version 17.0.3.30
RasterImagePrinter Class
See Also  Members  
Leadtools.WinForms Namespace : RasterImagePrinter Class



Supports printing of an Leadtools.RasterImage

Object Model

RasterImagePrinter Class

Syntax

Visual Basic (Declaration) 
Public Class RasterImagePrinter 
Visual Basic (Usage)Copy Code
Dim instance As RasterImagePrinter
C# 
public class RasterImagePrinter 
C++/CLI 
public ref class RasterImagePrinter 

Example

This example loads an image and then sends it to the printer. For an example on using the different rectangles associated with printing, refer to ImageRectangle.

Visual BasicCopy Code
' The image we are printing
   Private myImage As RasterImage = Nothing
   ' The current page number being printed
   Private currentPrintPageNumber As Integer
   Public Sub RasterImagePrinterExample()
      ' Check if there are printers installed on this machine
      If (PrinterSettings.InstalledPrinters Is Nothing) OrElse (PrinterSettings.InstalledPrinters.Count < 1) Then
         MessageBox.Show("There are no printers installed on this machine")
         Return
      End If

      ' Load the image
      Using codecs As New RasterCodecs()
         Me.myImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "Ocr1.tif"))
      End Using

      ' Create the print document object
      Using document As New PrintDocument()
         ' Setup the document pages
         document.PrinterSettings.MinimumPage = 1
         document.PrinterSettings.MaximumPage = Me.myImage.PageCount
         document.PrinterSettings.FromPage = 1
         document.PrinterSettings.ToPage = Me.myImage.PageCount

         Dim result As DialogResult = DialogResult.OK

         ' Select the printer
         Using printDlg As New PrintDialog()
            printDlg.Document = document

            printDlg.AllowSomePages = True

            result = printDlg.ShowDialog()
         End Using

         ' Setup the page
         If result = DialogResult.OK Then
            Using pageSetupDlg As New PageSetupDialog()
               pageSetupDlg.Document = document
               pageSetupDlg.ShowDialog()
            End Using
         End If

         If result = DialogResult.OK Then
            ' Add handlers for Begin/Print and End print events
            AddHandler document.BeginPrint, AddressOf document_BeginPrint
            AddHandler document.PrintPage, AddressOf document_PrintPage
            AddHandler document.EndPrint, AddressOf document_EndPrint

            ' Use the .NET print preview dialog
            Using printPreviewDlg As New PrintPreviewDialog()
               printPreviewDlg.Document = document
               printPreviewDlg.WindowState = FormWindowState.Maximized
               result = printPreviewDlg.ShowDialog()
            End Using
         End If
      End Using

      ' Clean up
      Me.myImage.Dispose()
   End Sub

   Private Sub document_BeginPrint(ByVal sender As Object, ByVal e As PrintEventArgs)
      ' Reset the current page number
      ' Since we are using the print preview dialog, this event will be called twice (once
      ' to generate the print preview and once for actual printing). So, we must set this back
      ' to the first print page
      Dim document As PrintDocument = DirectCast(sender, PrintDocument)
      Me.currentPrintPageNumber = document.PrinterSettings.FromPage
   End Sub

   Private Sub document_EndPrint(ByVal sender As Object, ByVal e As PrintEventArgs)
      ' Nothing to do here
   End Sub

   Private Sub document_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs)
      ' Get the print document object
      Dim document As PrintDocument = DirectCast(sender, PrintDocument)

      ' Create an new LEADTOOLS image printer class
      Dim printer As New RasterImagePrinter()

      ' Set the document object so page calculations can be performed
      printer.PrintDocument = document

      ' We want to fit and center the image into the maximum print area
      printer.SizeMode = RasterPaintSizeMode.FitAlways
      printer.HorizontalAlignMode = RasterPaintAlignMode.Center
      printer.VerticalAlignMode = RasterPaintAlignMode.Center

      ' Account for FAX images that may have different horizontal and vertical resolution
      printer.UseDpi = True

      ' Print the whole image
      printer.ImageRectangle = Rectangle.Empty

      ' Use maximum page dimension ignoring the margins, this will be equivalant of printing
      ' using Windows Photo Gallery
      printer.PageRectangle = RectangleF.Empty
      printer.UseMargins = False

      ' Print the current page
      printer.Print(Me.myImage, Me.currentPrintPageNumber, e)

      ' Go to the next page
      Me.currentPrintPageNumber = Me.currentPrintPageNumber + 1

      ' Inform the printer whether we have more pages to print
      If Me.currentPrintPageNumber <= document.PrinterSettings.ToPage Then
         e.HasMorePages = True
      Else
         e.HasMorePages = False
      End If

      ' De-couple our PrintDocument from the RasterImagePrinter
      printer.PrintDocument = Nothing
   End Sub

Public NotInheritable Class LEAD_VARS
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
C#Copy Code
// The image we are printing
   private RasterImage myImage = null;
   // The current page number being printed
   private int currentPrintPageNumber;
   public void RasterImagePrinterExample()
   {
      // Check if there are printers installed on this machine
      if(PrinterSettings.InstalledPrinters == null || PrinterSettings.InstalledPrinters.Count < 1)
      {
         MessageBox.Show("There are no printers installed on this machine");
         return;
      }

      // Load the image
      using(RasterCodecs codecs = new RasterCodecs())
      {
         this.myImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir,"Ocr1.tif"));
      }

      // Create the print document object
      using(PrintDocument document = new PrintDocument())
      {
         // Setup the document pages
         document.PrinterSettings.MinimumPage = 1;
         document.PrinterSettings.MaximumPage = this.myImage.PageCount;
         document.PrinterSettings.FromPage = 1;
         document.PrinterSettings.ToPage = this.myImage.PageCount;

         DialogResult result = DialogResult.OK;

         // Select the printer
         using(PrintDialog printDlg = new PrintDialog())
         {
            printDlg.Document = document;

            printDlg.AllowSomePages = true;

            result = printDlg.ShowDialog();
         }

         // Setup the page
         if(result == DialogResult.OK)
         {
            using(PageSetupDialog pageSetupDlg = new PageSetupDialog())
            {
               pageSetupDlg.Document = document;
               pageSetupDlg.ShowDialog();
            }
         }

         if(result == DialogResult.OK)
         {
            // Add handlers for Begin/Print and End print events
            document.BeginPrint += new PrintEventHandler(document_BeginPrint);
            document.PrintPage += new PrintPageEventHandler(document_PrintPage);
            document.EndPrint += new PrintEventHandler(document_EndPrint);

            // Use the .NET print preview dialog
            using(PrintPreviewDialog printPreviewDlg = new PrintPreviewDialog())
            {
               printPreviewDlg.Document = document;
               printPreviewDlg.WindowState = FormWindowState.Maximized;
               result = printPreviewDlg.ShowDialog();
            }
         }
      }

      // Clean up
      this.myImage.Dispose();
   }

   private void document_BeginPrint(object sender, PrintEventArgs e)
   {
      // Reset the current page number
      // Since we are using the print preview dialog, this event will be called twice (once
      // to generate the print preview and once for actual printing). So, we must set this back
      // to the first print page
      PrintDocument document = sender as PrintDocument;
      this.currentPrintPageNumber = document.PrinterSettings.FromPage;
   }

   private void document_EndPrint(object sender, PrintEventArgs e)
   {
      // Nothing to do here
   }

   private void document_PrintPage(object sender, PrintPageEventArgs e)
   {
      // Get the print document object
      PrintDocument document = sender as PrintDocument;

      // Create an new LEADTOOLS image printer class
      RasterImagePrinter printer = new RasterImagePrinter();

      // Set the document object so page calculations can be performed
      printer.PrintDocument = document;

      // We want to fit and center the image into the maximum print area
      printer.SizeMode = RasterPaintSizeMode.FitAlways;
      printer.HorizontalAlignMode = RasterPaintAlignMode.Center;
      printer.VerticalAlignMode = RasterPaintAlignMode.Center;

      // Account for FAX images that may have different horizontal and vertical resolution
      printer.UseDpi = true;

      // Print the whole image
      printer.ImageRectangle = Rectangle.Empty;

      // Use maximum page dimension ignoring the margins, this will be equivalant of printing
      // using Windows Photo Gallery
      printer.PageRectangle = RectangleF.Empty;
      printer.UseMargins = false;

      // Print the current page
      printer.Print(this.myImage, this.currentPrintPageNumber, e);

      // Go to the next page
      this.currentPrintPageNumber++;

      // Inform the printer whether we have more pages to print
      if(this.currentPrintPageNumber <= document.PrinterSettings.ToPage)
         e.HasMorePages = true;
      else
         e.HasMorePages = false;

      // De-couple our PrintDocument from the RasterImagePrinter
      printer.PrintDocument = null;
   }

static class LEAD_VARS
{
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}

Remarks

The RasterImagePrinter provides properties and method to make the process of printing an Leadtools.RasterImage easier.

Printing using the .NET framework involves adding a handler to the System.Drawing.Printing.PrintDocument.PrintPage event. In that event handler, you setup a new instance of the RasterImagePrinter class, setup its properties as desired then call the Print method passing it the Leadtools.RasterImage to print, the page number to print and the System.Drawing.Printing.PrintPageEventArgs object obtained through your System.Drawing.Printing.PrintPageEventHandler.

Note: The RasterViewerCenterMode type has been renamed in version 15. Use the RasterPaintAlignMode enumeration instead.

Inheritance Hierarchy

System.Object
   Leadtools.WinForms.RasterImagePrinter

Requirements

Target Platforms: Microsoft .NET Framework 2.0, Windows 2000, Windows XP, Windows Server 2003 family, Windows Server 2008 family, Windows Vista, Windows 7

See Also