地图打印资源 ArcEngine

时间:2022-06-10 14:57:58

// <summary>

/// 按纸张打印地图

/// </summary>

/// <param name="pActiveView"></param>

/// <param name="pscale"></param>

private void PrintAuto(IActiveView pActiveView)

{



IPaper pPaper = new Paper();

IPrinter pPrinter = new EmfPrinterClass();



System.Drawing.Printing.PrintDocument sysPrintDocumentDocument = newSystem.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);