ArcGIS Engine基础(24)之布局视图工具类(地图打印预览)

打印预览工具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();
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xizhjxust_GIS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值