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
ImageGear23.Formats.Pdf Assembly > ImageGear.Formats.PDF Namespace : ImGearPDFPrintOptions Class
ImageGear23.Twain Assembly > ImageGear.TWAIN Namespace : ImGearPrinter Enumeration
ImageGear23.Wpf Assembly > ImageGear.WPF.XPS Namespace > ImGearXPSDocument Class : Print Method
ImageGear.Web.UI Library > ImageGear.Web.UI_namespace > ImageGear.Web.UI.PageView : showPrintDialog Method
ImageGear.Web.UI Library > ImageGear.Web.UI_namespace > ImageGear.Web.UI.PageView : print Method