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