Enumerating a printer's available page sizes
To enumerate a printer's available page sizes, follow these steps:
- Initialize a new paper and printer variable for the printer whose forms you're enumerating. See the following code example:
/* Assign the new printer to the docPaper variable, */
docPaper.PrinterName = sNewPrinterName;
/* then assign docPaper to the .paper property of docPrinter. */
docPrinter.Paper = docPaper;
[VB.NET]
'Assign the new printer to the docPaper variable,
docPaper.PrinterName = sNewPrinterName
' then assign docPaper to the .paper property of docPrinter.
docPrinter.Paper = docPaper
- Use the IEnumNamedID object to enumerate the form names available in the printer.
In the following code example, the form names are compared against the MapDocument's current form, the form is replaced, and the Use printer paper settings option is selected:
IEnumNamedID eFormEnum; //An enumerator to enumerate the form names.
/* Loop through the forms available to the printer. */
eFormEnum = docPaper.Forms;
eFormEnum.Reset();
int iCounter = 0;
/*Create a new paper class and query paper sizes for each of the printer's
* form IDs. Compare this to the page size for m_MapDoc. If you find a match,
* set the printer and form ID for this printer to the correct size, then recheck
* the Use printer paper settings check box. Otherwise, set the map page
* size and uncheck Use printer paper settings.
*/
/* Get the next form in the list. */
iCounter = eFormEnum.Next(out sFormName);
while (sFormName != null)
{
/* Reinitialize docNewPaper.*/
docNewPaper = new PaperClass();
docNewPaper.PrinterName = sNewPrinterName;
docNewPaper.Orientation = m_MapDoc.PageLayout.Page.Orientation;
/* Set the form ID of docNewPaper so you can get the size. */
docNewPaper.FormID = (short)iCounter;
/* Get the new printer page size so you can see if an acceptable page size is available. */
docNewPaper.QueryPaperSize(out dNewPageWidth, out dNewPageHeight);
if ((dPageHeight == (Math.Round(dNewPageHeight))) && (dPageWidth == (Math.Round
(dNewPageWidth))))
{
/*
* If you find a match for the map page size, set this printer page size and check the
* Use printer paper settings check box by changing the form ID to "esripagesizeSameAsPrinter".
*/
System.Console.WriteLine("Found match on printer " + sNewPrinterName +
": Form size " + sFormName);
bFormFound = true;
/* First, assign the newly created paper to docPrinter.Paper. */
m_MapDoc.Printer.Paper = docNewPaper;
/* Then place the custom size into the .PageLayout.Page. */
m_MapDoc.PageLayout.Page.PutCustomSize(dPageWidth, dPageHeight);
/* Now that the pagelayout.page is set, choose the page.FormID, */
m_MapDoc.PageLayout.Page.FormID = esriPageFormID.esriPageFormSameAsPrinter;
/* and signal to the active view that the printer has changed to effect the changes. */
m_MapDoc.ActiveView.PrinterChanged(m_MapDoc.Printer);
}
iCounter = eFormEnum.Next(out sFormName);
}
[VB.NET]
Dim eFormEnum As IEnumNamedID 'An enumerator to enumerate the form names.
' Loop through the forms available to the printer to find a matching form size.
eFormEnum = docPaper.Forms
eFormEnum.Reset()
Dim iCounter As Integer = 0
iCounter = eFormEnum.Next(sFormName)
While (sFormName IsNot Nothing)
'Create a temporary paper and assign the printer, orientation, and form ID to it to get
'its page size and compare it to the desired page size.
docNewPaper = New Paper()
docNewPaper.PrinterName = sNewPrinterName
docNewPaper.Orientation = m_MapDoc.PageLayout.Page.Orientation
'Set the form ID to the current counter.
docNewPaper.FormID = iCounter
'Get the paper size of this form ID.
docNewPaper.QueryPaperSize(dNewPageWidth, dNewPageHeight)
If ((dPageHeight = Math.Round(dNewPageHeight)) And (dPageWidth = Math.Round(dNewPageWidth))) Then
' If you find a match for the map page size, set this printer page size and check the
' Use printer paper settings check box by changing the form ID to "esripagesizeSameAsPrinter".
System.Console.WriteLine("Found match on printer " + sNewPrinterName + ": Form size " + sFormName)
bFormFound = True
' First, assign the newly created paper to docPrinter.Paper. */
m_MapDoc.Printer.Paper = docNewPaper
' Then place the custom size into the .PageLayout.Page. */
m_MapDoc.PageLayout.Page.PutCustomSize(dPageWidth, dPageHeight)
' Now that the pagelayout.page is set, choose the page.FormID,*/
m_MapDoc.PageLayout.Page.FormID = esriPageFormID.esriPageFormSameAsPrinter
' and signal to the active view that the printer has changed to effect the changes. */
m_MapDoc.ActiveView.PrinterChanged(m_MapDoc.Printer)
End If
iCounter = eFormEnum.Next(sFormName)
End While
To use the code in this topic, reference the following assemblies in your Visual Studio project. In the code files, you will need using (C#) or Imports (VB .NET) directives for the corresponding namespaces (given in parenthesis below if different from the assembly name):
ESRI.ArcGIS.System (ESRI.ArcGIS.esriSystem)ESRI.ArcGIS.Output ESRI.ArcGIS.Carto
Development licensing | Deployment licensing |
---|---|
ArcGIS for Desktop Basic | ArcGIS for Desktop Basic |
ArcGIS for Desktop Standard | ArcGIS for Desktop Standard |
ArcGIS for Desktop Advanced | ArcGIS for Desktop Advanced |
Engine Developer Kit | Engine |