打印预览工具OnClick事件
public override void OnClick()
{
AxPageLayoutControl pageLayoutControl =
AxPageLayoutControl.FromChildHandle((IntPtr)m_HookHelper.ActiveView.ScreenDisplay.hWnd) as AxPageLayoutControl;
if (pageLayoutControl == null) return;
IPageLayoutControlDefault m_pageLayoutControl = pageLayoutControl.Object as IPageLayoutControlDefault;
if (m_pageLayoutControl == null) return;
PrintToolHelperClass m_printHelper = new PrintToolHelperClass(m_pageLayoutControl);
m_printHelper.PrintPreView();
}
打印管理类 PrintToolHelperClass ,查阅文章 ArcGIS Engine基础(23)之布局视图工具类(地图打印设置)
打印预览效果展示:
主要代码来源于 PrintToolHelperClass的PrintPreView方法
public void PrintPreView()
{
PrintPreviewDialog _ppd = new PrintPreviewDialog();
//当未设置打印机时,默认按地图控件布局页面预览
if (m_PageSettings == null)
{
IPage page = m_pageLayoutControl.PageLayout.Page;
if (page == null)
{
return;
}
esriPageFormID f = page.FormID;
string pageType = f.ToString();
page.PageToPrinterMapping = esriPageToPrinterMapping.esriPageMappingCrop;
//如果page为esriPageFormSameAsPrinter设置默认为A3
if (pageType == "esriPageFormSameAsPrinter") pageType = "esriPageFormA3";
//按照当前打印视图模板设置好默认的页面大小和方向
PageSettings pagesettings = PrintDocument.DefaultPageSettings;
foreach (PaperSize ps in PrintDocument.PrinterSettings.PaperSizes)
{
if (pageType.Contains(ps.Kind.ToString()))
{
pagesettings.PaperSize = ps;
break;
}
}
if ((short)page.Orientation == 1)
{
pagesettings.Landscape = false;
}
else pagesettings.Landscape = true;
m_PageSettings = pagesettings;
//PrintDocument.DefaultPageSettings = pagesettings;
for (int i = 0; i <= PrinterSettings.InstalledPrinters.Count - 1; i++)
{
if (PrinterSettings.InstalledPrinters[i].Trim() == "Microsoft XPS Document Writer")
PrintDocument.PrinterSettings.PrinterName = PrinterSettings.InstalledPrinters[i].Trim();
}
PrinterSettings printerSettings = PrintDocument.PrinterSettings;
printerSettings.DefaultPageSettings.PaperSize = pagesettings.PaperSize;
printerSettings.DefaultPageSettings.Landscape = pagesettings.Landscape;
m_PrinterSettings = printerSettings;
IPaper pPaper;
pPaper = new Paper();
//printer = new EmfPrinterClass();
int d = m_PrinterSettings.GetHdevmode().ToInt32();
int d2 = m_PrinterSettings.GetHdevnames().ToInt32();
pPaper.Attach(m_PrinterSettings.GetHdevmode().ToInt32(), m_PrinterSettings.GetHdevnames().ToInt32());
m_pageLayoutControl.PageLayout.Page.Units = pPaper.Units;
m_pageLayoutControl.PageLayout.Page.FormID = esriPageFormID.esriPageFormSameAsPrinter;
m_pageLayoutControl.PageLayout.Page.PageToPrinterMapping = esriPageToPrinterMapping.esriPageMappingCrop;
m_pageLayoutControl.PageLayout.Page.StretchGraphicsWithPage = false;
IPrinter printer = m_pageLayoutControl.Printer;
printer.Paper = pPaper;
m_pageLayoutControl.ActiveView.PrinterChanged(printer);
PrintDocument.DefaultPageSettings = m_PageSettings;
PrintDocument.PrinterSettings = m_PrinterSettings;
m_Copies = m_PrinterSettings.Copies;
//m_PrintMap.ZoomToWholePage();
m_pageLayoutControl.Refresh((esriViewDrawPhase)65535, null, null);
}
_ppd.UseAntiAlias = true;
_ppd.Document = PrintDocument;
_ppd.ShowDialog();
}