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

本文主要是介绍ArcGIS For Server10.1新特性之-服务器端打印服务及前端调用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

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

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

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

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

ArcCatalog中查看如下:

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

代码如下: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>
复制代码
文章出处:http://www.cnblogs.com/esrichina/archive/2012/12/13/2816501.html

这篇关于ArcGIS For Server10.1新特性之-服务器端打印服务及前端调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/636113

相关文章

前端下载文件时如何后端返回的文件流一些常见方法

《前端下载文件时如何后端返回的文件流一些常见方法》:本文主要介绍前端下载文件时如何后端返回的文件流一些常见方法,包括使用Blob和URL.createObjectURL创建下载链接,以及处理带有C... 目录1. 使用 Blob 和 URL.createObjectURL 创建下载链接例子:使用 Blob

Vuex Actions多参数传递的解决方案

《VuexActions多参数传递的解决方案》在Vuex中,actions的设计默认只支持单个参数传递,这有时会限制我们的使用场景,下面我将详细介绍几种处理多参数传递的解决方案,从基础到高级,... 目录一、对象封装法(推荐)二、参数解构法三、柯里化函数法四、Payload 工厂函数五、TypeScript

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

CSS will-change 属性示例详解

《CSSwill-change属性示例详解》will-change是一个CSS属性,用于告诉浏览器某个元素在未来可能会发生哪些变化,本文给大家介绍CSSwill-change属性详解,感... will-change 是一个 css 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化

CSS去除a标签的下划线的几种方法

《CSS去除a标签的下划线的几种方法》本文给大家分享在CSS中,去除a标签(超链接)的下划线的几种方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧... 在 css 中,去除a标签(超链接)的下划线主要有以下几种方法:使用text-decoration属性通用选择器设置:使用a标签选择器,将tex

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

在React中引入Tailwind CSS的完整指南

《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目