×
您的位置: 首页 > 编程笔记

ArcGIS Engine C#,按纸张打印地图代码

C# ArcGIS AR 时间:2010-12-26  查看:658   收藏
摘要:ArcGIS Engine C#,按纸张打印地图代码 //

/// 按纸张打印地图 //by yl landgis@126.com 2008.6.18 ///

///

///

private void PrintAuto(IActiveView pActiveView)

{

IPaper pPaper = new Paper();

IPrinter pPrinter = new EmfPrinterClass();

System.Drawing.Printing.PrintDocument sysPrintDocumentDocument = new System.Drawing.Printing.PrintDocument();

pPaper.PrinterName = sysPrintDocumentDocument.PrinterSettings.PrinterName;

pPrinter.Paper = pPaper;

int Resolution = pPrinter.Resolution;

double w, h;

IEnvelope PEnvelope = pActiveView.Extent;

w = PEnvelope.Width;

h = PEnvelope.Height;

double pw, ph;//纸张

pPrinter.QueryPaperSize(out pw, out ph);

tagRECT userRECT = pActiveView.ExportFrame;

userRECT.left = (int)(pPrinter.PrintableBounds.XMin * Resolution);

userRECT.top = (int)(pPrinter.PrintableBounds.YMin * Resolution);

if ((w / h) > (pw / ph))//以宽度来调整高度

{

userRECT.right = userRECT.left + (int)(pPrinter.PrintableBounds.Width * Resolution);

userRECT.bottom = userRECT.top + (int)((pPrinter.PrintableBounds.Width * Resolution) * h / w);

}

else

{

userRECT.bottom = userRECT.top + (int)(pPrinter.PrintableBounds.Height * Resolution);

userRECT.right = userRECT.left + (int)(pPrinter.PrintableBounds.Height * Resolution * w / h);

}

IEnvelope pDriverBounds = new EnvelopeClass();

pDriverBounds.PutCoords(userRECT.left, userRECT.top, userRECT.right, userRECT.bottom);

ITrackCancel pCancel = new CancelTrackerClass();

int hdc = pPrinter.StartPrinting(pDriverBounds, 0);

pActiveView.Output(hdc, pPrinter.Resolution,

ref userRECT, pActiveView.Extent, pCancel);

pPrinter.FinishPrinting();

}

调用 PrintAuto(this.axMapControl1.ActiveView);

 

0% (0)
0% (0)