⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 printtask_csharp.cs

📁 arcgis engine地图打印任务的应用
💻 CS
📖 第 1 页 / 共 3 页
字号:
            return base.GetCallbackResult();
        }

        #endregion

        #region ITask overrides: Input, ExecuteTask, GetGISResourceItemDependencies

        public override object Input
        {
            get
            {
                return base.Input;
            }
            set
            {
                base.Input = value;

                if (value != null)
                {
                    EnsureChildControls();

                    NameValueCollection keyValColl = value as NameValueCollection;

                    #region Parse inputs into controls
                    // Need to do this in case full postback occurs(?)

                    if (!String.IsNullOrEmpty(keyValColl["title"]))
                    {
                        //txtTitle.Text = Encoding.GetEncoding("gb2312").GetString(Convert.FromBase64String(keyValColl["title"]));
                        txtTitle.Text = keyValColl["title"];
                    }
                    ckbPrintMap.Checked = !String.IsNullOrEmpty(keyValColl["mapId"]);
                    this.Map = keyValColl["mapId"];
                    ddlMapWidth.SelectedValue = keyValColl["width"];
                    ddlMapResolution.SelectedValue = keyValColl["resolution"];
                    txtScale.Text = keyValColl["scale"];

                    // get a current list of task results into the task checkboxlist
                    UpdateResultsListInPrintTask();
                    // select the task results, if any chosen
                    string selResults = keyValColl["printResults"];
                    if (!String.IsNullOrEmpty(selResults))
                    {
                        string[] selResultIndx = selResults.Split(new char[] { ',' });
                        for (int i = 0; i < selResultIndx.Length; i++)
                            cblResults.Items[int.Parse(selResultIndx[i])].Selected = true;
                    }

                    #endregion
                }
            }
        }

        public override void ExecuteTask()
        {
            Results = null;
            if (Input == null)
                return;

            NameValueCollection keyValColl = (NameValueCollection)Input;

            #region Add map to print page

            Map mapCtrl = (Map)Utilities.FindControlRecursive(Page, this.Map); 
                                    // Page.FindControl(this.Map);

            PagePrinter pgPrinter = new PagePrinter(mapCtrl);

            // title may have had &'s replaced at client--restore now
            pgPrinter.PrintTitle = txtTitle.Text.Replace("##amp##", "&");
            pgPrinter.PrintResolution = int.Parse(this.ddlMapResolution.SelectedValue);
            if (this.ddlMapWidth.SelectedValue != "Default")
                pgPrinter.PrintWidth = int.Parse(this.ddlMapWidth.SelectedValue);

            int scale;
            bool scaleParse = int.TryParse(txtScale.Text, out scale);
            if (scaleParse)
                pgPrinter.PrintScale = scale;

            // add scalebar, if present on page
            if (IncludeScaleBar)
            {
                List<Control> ctls = Utilities.FindControls(typeof(ScaleBar), Page.Controls);
                if (ctls.Count > 0)
                {
                    ScaleBar mapScalebar = null;
                    foreach (ScaleBar sb in ctls)
                    {
                        if (sb.Map == this.Map)
                        {
                            mapScalebar = sb;
                            break;
                        }
                    }
                    pgPrinter.ScaleBarControl = mapScalebar;
                }
            }
            #endregion

            #region Add task results to print page
            pgPrinter.ShowIdField = this.ShowIdField;
            pgPrinter.NodesToPrint = GetNodesToPrint();

            string printContent = Page.Server.HtmlEncode(pgPrinter.CreatePrintPageContent());
            #endregion

            #region Set up callback results

            // add output to callbackresults
            Object[] oa = new Object[1];
            string printFunctionCall =
                String.Format("PrintTaskDisplayPage(\"{0}\")", printContent);
            oa[0] = printFunctionCall;

            CallbackResult cbResults = new CallbackResult(null, "javascript", oa);
            this.CallbackResults.Add(cbResults);

            Results = new SimpleTaskResult(
                String.Concat(this.ID, " print page"), String.Empty);
            #endregion
        }

        public override List<GISResourceItemDependency> GetGISResourceItemDependencies()
        {
            return new List<GISResourceItemDependency>();
        }

        #endregion

        #region Private methods

        // Gets a list of the task types supported in the print task for printing task results
        private string[] SupportedTaskTypes
        {
            get
            {
                string[] taskTypes = new string[]
                    { 
                        typeof(ESRI.ArcGIS.ADF.Tasks.QueryAttributesTask).Name,
                        typeof(ESRI.ArcGIS.ADF.Tasks.SearchAttributesTask).Name,

                        // use hard-coded strings to avoid reference to other custom task
                        "GraphicalSelectionTask",
                        "ImsBufferTask"
                    };
                return taskTypes;
            }
        }

        // handle event when task result is removed
        private void TaskResultContextMenu_ItemClicked(object sender, ContextMenuItemEventArgs args)
        {
            if (args.Item.Text == "Remove")
            {
                    // Update the list of task results in the task UI
                    //  - since this is a callback by a different control, need to pass the
                    //     taskresults HTML to display in browser
                    CallbackResult cbResultTaskList = RefreshTaskResultsList();
                    ((ContextMenu)sender).CallbackResults.Add(cbResultTaskList);
            }
        }

        // Refreshes task results list in Print dialog, via callback
        private CallbackResult RefreshTaskResultsList()
        {
            // Update the list of IMS task results
            bool resultsItemsFound = UpdateResultsListInPrintTask();

            // Need to add to callback results to refresh results-list content
            CallbackResult cbResultTaskList = Utilities.RefreshControlHtml(cblResults);
            return cbResultTaskList;
        }

        // Compares current task results items to list in print task, and updates the
        //  list if any changes have occurred
        private bool UpdateResultsListInPrintTask()
        {
            bool resultsFound = false;
            ListItem[] taskResItems =
                Utilities.GetTaskResultList(this.TaskResultsContainers, Page);

            if (Utilities.TaskResultItemsChanged(taskResItems, cblResults))
            {
                // get HTML content from taskResItems and replace cblResults content in page via callback
                cblResults.Items.Clear();
                if (taskResItems.Length > 0)
                {
                    cblResults.Items.AddRange(taskResItems);
                    resultsFound = true;
                }
                else
                {
                    ListItem liNone = new ListItem("(不可用)", "0");
                    liNone.Enabled = false;
                    liNone.Selected = false;
                    cblResults.Items.Add(liNone);
                }
            }
            return resultsFound;
        }

        private TreeViewPlusNodeCollection GetNodesToPrint()
        {
            TreeViewPlusNodeCollection nodeColl = new TreeViewPlusNodeCollection();

            List<TaskResults> trColl = Utilities.GetTaskResultsControls(
                this.TaskResultsContainers, Page);
            bool foundNode;

            foreach (ListItem item in cblResults.Items)
            {
                foundNode = false;

                // only print items checked in task results list in print UI
                if (item.Selected)
                {
                    string taskJobId = item.Value;

                    // find task results job item in TaskResults
                    foreach (TaskResults tr in trColl)
                    {
                        foreach (TreeViewPlusNode rNode in tr.Nodes)
                        {
                            if (rNode is TaskResultNode)
                            {
                                TaskResultNode trNode = (TaskResultNode)rNode;
                                if (trNode.TaskJobID == taskJobId)
                                {
                                    // found the task job: add to nodes to print
                                    nodeColl.Add(trNode);
                                    foundNode = true;   // skip rest of nodes
                                    break;
                                }
                            }
                            if (foundNode)
                                break;
                        }
                    }
                }
            }
            if (nodeColl.Count > 0)
                return nodeColl;
            else
                return null;
        }

        #endregion

        #region OnInit method - handles print image request

        protected override void OnInit(EventArgs e)
        {
            // Handle request for map print image
            if (Page.Request.QueryString["getMap"] != null)
            {
                // retrieve bitmap from session
                string mapKey = (string)Page.Request.QueryString["getMap"];
                System.Drawing.Bitmap mapImage = (System.Drawing.Bitmap)
                    Page.Session[mapKey];
                    // ?use StateManager - works but Session may be more appropriate
                    //this.StateManager.Get(mapKey);

                Page.Response.Clear();
                Page.Response.ContentType = "Image/Png";

                if (mapImage != null)
                {

                    using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
                    {
                        mapImage.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
                        stream.WriteTo(Page.Response.OutputStream);
                    }
                    // (Can't dispose of image in case re-requested, e.g., for print preview)
                    //mapImage.Dispose();
                }

                // Cut off remaining page execution
                Page.Response.End();
            }

            base.OnInit(e);
        }
        #endregion

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -