地图打印资源 ArcEngine

// <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);

 

转载自:https://blog.csdn.net/kone0611/article/details/48031543

You may also like...