ArcGIS For Server10.1新特性之-服务器端打印服务及前端调用

ArcGIS For Server10.1新特性之一就是服务器端打印,这个打印功能使用起来非常的方便,因为它是一个现成的GP服务,使用的时候只要输入相应的地图,地图范围,模板的名称等,就可以按需打印出你需要的地图。下面我们来看一下从制作模版到发布服务及服务调用的整个流程吧:

1、自己定义一个打印模板,如下图是布局视图:

ArcGIS For Server10.1新特性之-服务器端打印服务及前端调用

   将模版保存到C:\Program Files (x86)\ArcGIS\Desktop10.1\Templates\ExportWebMapTemplates(当然你也可以保存到其他路径下,在发布服务的时候你可以指定你自己的路径)

2、在ArcToolBox中打开Export Web Map工具:

ArcGIS For Server10.1新特性之-服务器端打印服务及前端调用

输入参数:Web Map as JSON为空;Output File为默认参数;Format可以自己输入;Layout Templates Folder(optional)选择一个模板文件夹(这里选择ArcGIS安装目录的模板文件夹),然后Layout  Templates (optional)就可以选择一个默认的模板了

ArcGIS For Server10.1新特性之-服务器端打印服务及前端调用

点击OK,打开菜单栏Geoprocessing/Results,执行完成后选中Export Web Map右键Share as Geoprocessing services

ArcGIS For Server10.1新特性之-服务器端打印服务及前端调用

ArcGIS For Server10.1新特性之-服务器端打印服务及前端调用

下一步、下一步:Analyse后如果没有错误,直接点击Publish发布:

ArcGIS For Server10.1新特性之-服务器端打印服务及前端调用

ArcCatalog中查看如下:

ArcGIS For Server10.1新特性之-服务器端打印服务及前端调用

3、服务发布好后,可一下在Flex中如何调用一把:ArcGIS Flex API3.0也增加了对该打印服务的支持:

ArcGIS For Server10.1新特性之-服务器端打印服务及前端调用

ArcGIS For Server10.1新特性之-服务器端打印服务及前端调用

 代码如下:print.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:esri="http://www.esri.com/2008/ags"
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Declarations>
        <!-- 将非可视元素(例如服务、值对象)放在此处 -->
    </fx:Declarations>
    
    <fx:Script>
        <![CDATA[
            import mx.managers.PopUpManager;  
            
            private function onclick(event:MouseEvent):void
            {
                
                var popWin:printForm = printForm(PopUpManager.createPopUp(this,printForm,false)); 
                popWin.printTask.getServiceInfo();//调用 打印 GP,获取模版和格式参数
                popWin.map = this.myMap;
                
            }
        ]]>
    </fx:Script>
    
    <esri:Map id="myMap">         
        <esri:ArcGISDynamicMapServiceLayer url="http://localhost:6080/arcgis/rest/services/routTest2/MapServer"/>
    </esri:Map>
    <mx:Button id="button" x="409" y="10" label="打印" click="onclick(event)"/>
</s:Application>

printForm.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"
         xmlns:s="library://ns.adobe.com/flex/spark"
         xmlns:mx="library://ns.adobe.com/flex/mx"
         xmlns:esri="http://www.esri.com/2008/ags"
         width="100%" height="100%"
         close="PopUpManager.removePopUp(this)"
        >
    <fx:Script>
        <![CDATA[
            import com.esri.ags.Map;
            import com.esri.ags.events.PrintEvent;
            import com.esri.ags.tasks.supportClasses.DataFile;
            import com.esri.ags.tasks.supportClasses.JobInfo;
            import com.esri.ags.tasks.supportClasses.ParameterValue;
            import com.esri.ags.tasks.supportClasses.PrintServiceInfo;
            import com.esri.ags.tasks.supportClasses.LegendOptions;
            import com.esri.ags.tasks.supportClasses.LegendLayer;
            
            import mx.collections.IList;
            import mx.controls.Alert;
            import mx.managers.PopUpManager;
            import mx.rpc.events.FaultEvent;
            import com.esri.ags.layers.*;
            
            [Bindable]          
            public  var  map:Map;
            
            //打印结束后处理 
            private function printTask_executeCompleteHandler(event:PrintEvent):void
            {
                
                
                var paramValue:ParameterValue = event.executeResult.results[0];
                var dataFile:DataFile = paramValue.value as DataFile;
                navigateToURL(new URLRequest(dataFile.url));
            }
            
            private function printTask_getResultDataCompleteHandler(event:PrintEvent):void
            {
                
                var dataFile:DataFile = event.parameterValue.value as DataFile;
                navigateToURL(new URLRequest(dataFile.url));
            }
            
            private function printTask_jobCompleteHandler(event:PrintEvent):void
            {
                
                var jobInfo:JobInfo = event.jobInfo;
                if (jobInfo.jobStatus == JobInfo.STATUS_SUCCEEDED)
                {
                    printTask.getResultData(jobInfo.jobId);
                }
                else
                {
                    
                    Alert.show(jobInfo.jobStatus);
                }
            }
            
            //获取打印参数(模版和格式)
            protected function printTask_getServiceInfoCompleteHandler(event:PrintEvent):void
            {                
                initLayoutTemplates(event.serviceInfo);
                initFormats(event.serviceInfo);
                
                printButton.enabled = true;
            }
            
            //获得所有支持的打印格式
            private function initFormats(serviceInfo:PrintServiceInfo):void
            {
                var formatsVisibility:Boolean = true;
                var formats:IList = serviceInfo.formats;
                formatsDDL.selectedItem = serviceInfo.defaultFormat;

            }
            
            //获得所有模版
            private function initLayoutTemplates(serviceInfo:PrintServiceInfo):void
            {
                var layoutTemplatesVisibility:Boolean = true;                                
                layoutTemplatesFI.label = "模版";        
                var layoutTemplates:IList = serviceInfo.layoutTemplates;                
                    layoutTemplatesDDL.selectedItem = serviceInfo.defaultLayoutTemplate;
            }
            
            
            //获取打印比例尺
            private function printButton_exportWebMapClickHandler(event:MouseEvent):void
            {
                
                layoutOptions.title = txtTitle.text;
                

                layoutOptions.legendOptions = getLegendOptions();
                
                var oldscale:Number;
                var oldLODs:Array;
                if (scaleCheckbox.selected)
                {

                    oldscale =map.scale;
                    oldLODs = map.lods;
                    
                    map.lods = null; //prevent LOD snapping
                    map.scale = Number(scaleInput.text);
                }
                
                if (printTask.getServiceInfoLastResult.isServiceAsynchronous)
                {
                    printTask.submitJob(printParameters);
                }
                else
                {
                    printTask.execute(printParameters);
                }
                
                if (scaleCheckbox.selected)
                {
                    map.scale = oldscale;
                    map.lods = oldLODs;
                }
            }
            
            private function getLegendOptions():LegendOptions
            {
                var result:LegendOptions = new LegendOptions();
                var legendLayers:Array = [];
                
                for each (var layer:Layer in map.layers)
                {
                    if (layer.name.indexOf("hiddenLayer_") == -1 && !(layer is GraphicsLayer && !(layer is FeatureLayer)))
                    {                        
                            var legendLayer:LegendLayer = new LegendLayer();
                            legendLayer.layerId = layer.id;
                            legendLayers.push(legendLayer);                        
                    }
                }
                
                result.legendLayers = legendLayers;
                
                return result;
            }
            
            protected function printTask_faultHandler(event:FaultEvent):void
            {
                
                Alert.show(event.fault.toString());
            
            }
            
        ]]>
    </fx:Script>
    
    <fx:Declarations>
        <esri:PrintTask id="printTask" url="http://localhost:6080/arcgis/rest/services/ExportWebMap/GPServer/Export%20Web%20Map"    
                        executeComplete="printTask_executeCompleteHandler(event)"
                        fault="printTask_faultHandler(event)"
                        getResultDataComplete="printTask_getResultDataCompleteHandler(event)"
                        getServiceInfoComplete="printTask_getServiceInfoCompleteHandler(event)"
                        jobComplete="printTask_jobCompleteHandler(event)"
                        showBusyCursor="true"/>
        <esri:PrintParameters id="printParameters"
                              format="{formatsDDL.selectedItem}"
                              layoutTemplate="{layoutTemplatesDDL.selectedItem}"
                              map="{map}"
                              preserveScale="{scaleCheckbox.selected}">
            <esri:layoutOptions>
                <esri:LayoutOptions id="layoutOptions"/>
            </esri:layoutOptions>
        </esri:PrintParameters>
    </fx:Declarations>
    
    
    
    <mx:FormItem id="titleFI"  width="100%" label="标题" >                
        <s:TextInput id="txtTitle"  width="100%"  text="请输入标题"/>                
    </mx:FormItem>
    <mx:FormItem id="layoutTemplatesFI"  includeInLayout="true" width="100%" label="模版"  visible="true">                
        <s:DropDownList id="layoutTemplatesDDL" width="175"     
                        dataProvider="{printTask.getServiceInfoLastResult.layoutTemplates}"
                        requireSelection="true"/>                            
    </mx:FormItem>
    <mx:FormItem id="formatsFI"  width="100%" label="格式"  visible="true">            
        <s:DropDownList id="formatsDDL"   dataProvider="{printTask.getServiceInfoLastResult.formats}"    width="100" requireSelection="true"/>                    
    </mx:FormItem>
    <s:HGroup id="scaleFI"
              width="100%"
              horizontalAlign="center"
              visible="true">
        <s:CheckBox id="scaleCheckbox" label="打印比例尺"/>
        <s:TextInput id="scaleInput"
                     width="100%"  
                     enabled="{scaleCheckbox.selected}"
                     restrict="0-9"/>
    </s:HGroup>
    <s:HGroup width="100%" horizontalAlign="center" >
        <s:Button id="printButton" label="打印"      click="printButton_exportWebMapClickHandler(event)"         
                  enabled="false"/>
    </s:HGroup>
</mx:TitleWindow>

 

转载于:https://www.cnblogs.com/esrichina/archive/2012/12/13/2816501.html