Supports printing of an
RasterImage
Syntax
Visual Basic (Declaration) | |
---|
Public Class 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 Basic | Copy Code |
---|
Private myImage As RasterImage = Nothing
Private currentPrintPageNumber As Integer
Public Sub RasterImagePrinterExample()
If (PrinterSettings.InstalledPrinters Is Nothing) OrElse (PrinterSettings.InstalledPrinters.Count < 1) Then
MessageBox.Show("There are no printers installed on this machine")
Return
End If
RasterCodecs.Startup()
Using codecs As New RasterCodecs()
Me.myImage = codecs.Load("C:\Users\Public\Documents\LEADTOOLS Images\Ocr1.tif")
End Using
RasterCodecs.Shutdown()
Using document As New PrintDocument()
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
Using printDlg As New PrintDialog()
printDlg.Document = document
printDlg.AllowSomePages = True
result = printDlg.ShowDialog()
End Using
If result = DialogResult.OK Then
Using pageSetupDlg As New PageSetupDialog()
pageSetupDlg.Document = document
pageSetupDlg.ShowDialog()
End Using
End If
If result = DialogResult.OK Then
AddHandler document.BeginPrint, AddressOf document_BeginPrint
AddHandler document.PrintPage, AddressOf document_PrintPage
AddHandler document.EndPrint, AddressOf document_EndPrint
Using printPreviewDlg As New PrintPreviewDialog()
printPreviewDlg.Document = document
printPreviewDlg.WindowState = FormWindowState.Maximized
result = printPreviewDlg.ShowDialog()
End Using
End If
End Using
Me.myImage.Dispose()
End Sub
Private Sub document_BeginPrint(ByVal sender As Object, ByVal e As PrintEventArgs)
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)
End Sub
Private Sub document_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs)
Dim document As PrintDocument = DirectCast(sender, PrintDocument)
Dim printer As New RasterImagePrinter()
printer.PrintDocument = document
printer.SizeMode = RasterPaintSizeMode.FitAlways
printer.HorizontalAlignMode = RasterPaintAlignMode.Center
printer.VerticalAlignMode = RasterPaintAlignMode.Center
printer.UseDpi = True
printer.ImageRectangle = Rectangle.Empty
printer.PageRectangle = RectangleF.Empty
printer.UseMargins = False
printer.Print(Me.myImage, Me.currentPrintPageNumber, e)
Me.currentPrintPageNumber = Me.currentPrintPageNumber + 1
If Me.currentPrintPageNumber <= document.PrinterSettings.ToPage Then
e.HasMorePages = True
Else
e.HasMorePages = False
End If
printer.PrintDocument = Nothing
End Sub
|
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 RasterCodecs.Startup(); using(RasterCodecs codecs = new RasterCodecs()) { this.myImage = codecs.Load(@"C:\Users\Public\Documents\LEADTOOLS Images\Ocr1.tif"); } RasterCodecs.Shutdown(); // 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; } |
Remarks
Inheritance Hierarchy
Requirements
Target Platforms: Microsoft .NET Framework 2.0, Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family
See Also