private void document_PrintPage(object sender, PrintPageEventArgs e) { // 当printPreviewDialog的show方法触发时,引用这段代码 PrintPagelayoutControl.Page.PageToPrinterMapping = esriPageToPrinterMapping.esriPageMappingTile; // 获取打印分辨率 short dpi = (short)e.Graphics.DpiX; IEnvelope devBounds = new EnvelopeClass(); // 获取打印页面 IPage page = PrintPagelayoutControl.Page; // 获取打印页数 short printPageCount; printPageCount = PrintPagelayoutControl.get_PrinterPageCount(0); m_CurrentPrintPage++; // 选择打印机 IPrinter printer = PrintPagelayoutControl.Printer; // 获取打印机页大小 page.GetDeviceBounds(printer, m_CurrentPrintPage, 0, dpi, devBounds); // 获取页面大小的坐标范围,即四个角的坐标 tagRECT deviceRect; double minX, minY, maxX, maxY; devBounds.QueryCoords(out minX, out minY, out maxX, out maxY); deviceRect.bottom = (int)maxY; deviceRect.left = (int)minX; deviceRect.top = (int)minY; deviceRect.right = (int)maxX; // 确定当前打印页面的大小 IEnvelope visBounds = new EnvelopeClass(); page.GetPageBounds(printer, m_CurrentPrintPage, 0, visBounds); IntPtr hdc = e.Graphics.GetHdc(); PrintPagelayoutControl.ActiveView.Output(hdc.ToInt32(), dpi, ref deviceRect, visBounds, m_TrackCancel); e.Graphics.ReleaseHdc(hdc); if (m_CurrentPrintPage < printPageCount) { e.HasMorePages = true; } else { e.HasMorePages = false; } }
private void syn(AxPageLayoutControl mainlayoutControl) { IObjectCopy objectcopy = new ObjectCopyClass(); object tocopymap = mainlayoutControl.ActiveView.GraphicsContainer; //获取mapcontrol中的map 这个是原始的 object copiedmap = objectcopy.Copy(tocopymap); //复制一份map,是一个副本 object tooverwritemap = PrintPagelayoutControl.ActiveView.GraphicsContainer; //IActiveView.FocusMap : The map that tools and controls act on. 控件和工具作用的地图,大概是当前地图吧!!! objectcopy.Overwrite(copiedmap, ref tooverwritemap); System.Runtime.InteropServices.Marshal.ReleaseComObject(objectcopy); IGraphicsContainer mainGraphCon = tooverwritemap as IGraphicsContainer; mainGraphCon.Reset(); IElement pElement = mainGraphCon.Next(); IArray pArray = new ArrayClass(); while (pElement != null) { pArray.Add(pElement); pElement = mainGraphCon.Next(); } int pElementCount = pArray.Count; IPageLayout PrintPageLayout = PrintPagelayoutControl.PageLayout; IGraphicsContainer PrintGraphCon = PrintPageLayout as IGraphicsContainer; PrintGraphCon.Reset(); IElement pPrintElement = PrintGraphCon.Next(); while (pPrintElement != null) { PrintGraphCon.DeleteElement(pPrintElement); pPrintElement = PrintGraphCon.Next(); } for (int i = 0; i < pArray.Count; i++) { PrintGraphCon.AddElement(pArray.get_Element(pElementCount - 1 - i) as IElement, 0); } PrintPagelayoutControl.Refresh(); }