急求实现 Winform 打印ArcMap 地图代码

zyr987503101 2012-11-02 03:46:48
自己写的一个简单的Winform 程序,加载地图:
private void Form1_Load(object sender, EventArgs e)
{
LoadMap();
}

private void LoadMap()
{
this.Cursor = Cursors.WaitCursor;
Application.DoEvents();
string sFilePath = @"D:\地图配置\map\ChangZhouLayer\常州.mxd";
if (MainMap.CheckMxFile(sFilePath))
{
MainMap.MousePointer = esriControlsMousePointer.esriPointerHourglass;
MainMap.LoadMxFile(sFilePath);
MainMap.MousePointer = esriControlsMousePointer.esriPointerDefault;
this.Cursor = Cursors.Default;

}
else
{
MessageBox.Show("选择打开的地图文档无效", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}

初学AE 开发现在界面有一打印按钮,急求打印代码,忘个大侠不吝赐教,小女子感激不尽!
...全文
135 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyr987503101 2012-11-29
  • 打赏
  • 举报
回复
打印地图的分辨率跟纸张大小有什么关系啊,帖子这么久怎都没人,求大侠指教哇!
zyr987503101 2012-11-09
  • 打赏
  • 举报
回复
引用 2 楼 taomanman 的回复:
是AE中的吧?? C# code12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455AE, C#,按纸张打印地图private void PrintAuto(IActiveView pActiveView){ ……
这些资料也有,就是想结合Winform 的打印控件:Printer 之类的,可以让用户选择纸张,预览,打印设置等人性化的适合用户简单操作的界面,有做过这类的朋友希望多多指教,好几天了,还是没什么思路。
暖枫无敌 2012-11-03
  • 打赏
  • 举报
回复
是AE中的吧??

AE, C#,按纸张打印地图
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);

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧