`
蓝色飞扬
  • 浏览: 94952 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

web GIS地图打印(2)

阅读更多

showModalDialog("${cpath}/common/popinput.htm",ar,"resizable:yes;scroll:yes;dialogHeight:800px;dialogWidth:900px;center=yes");

//打开对话框显示pdf,这种方式是为了避免在打开pdf时提示保存或打开,直接在ie中打开pdf

    }

// popinput.htm的代码也没什么,代码如下:

<script>

  document.write("<frameset rows='0,*' frameborder='NO' border='0' framespacing='0'>");

  document.write("<frame src='' name='unvisible'>");

  document.write("<frame id='xxx' src="+"'"+window.dialogArguments[0]+"'" +  " name='opened'>");

  document.write("</frameset>");

  var inputObj = window.dialogArguments[1];

</script>

<noframes><body>

</body></noframes>

 

 

 

 

 

 

5action中就是生成pdf的操作了,这里主要是用了jasperreports,print_t.jrxml模版进行xml解析,将需要添加的东西添加进去

Action中的主要代码:

else if("print".equals(act)){

           final String cpath = request.getParameter("cpath");

           String title = request.getParameter("title");

           String scale = request.getParameter("scale");

           int width = Integer.valueOf(request.getParameter("width"));

           int height = Integer.valueOf(request.getParameter("height"));

           double mapWidth = Double.valueOf(request.getParameter("mapWidth"));

           double mapHeight = Double.valueOf(request.getParameter("mapHeight"));

           String imgUrl = request.getParameter("imgUrl").replace("||", "&");

           String imgname = request.getParameter("imgname");

           String realPath = request.getParameter("realPath");

           System.out.println(imgUrl);

           SAXBuilder builder=new SAXBuilder(false);

           builder.setEntityResolver(new EntityResolver() {

                public InputSource resolveEntity(String publicId,

                        String systemId) throws SAXException, IOException {

                    return new InputSource(cpath+"/report/jasperreport.dtd");

                }

            });

           String dirPath = cpath+"/moduleFile/print_t.jrxml"; 

           Document doc = builder.build(dirPath);

           setPrint(doc, title, scale, width, height, mapWidth, mapHeight, imgUrl,cpath,imgname,dataSet,realPath);

          

           request.setAttribute("document", doc);

           request.setAttribute("dataSet", dataSet);

           return mapping.findForward("printview");

       }

 

 

解析xml的代码,BillXML是我们写的一个用来解析xml的类。这个方法的代码其实就是些重复的代码,因为pdf的页面大小和各元素的xy坐标都不确定,所以这里要根据选的纸张大小来确定他们的长宽,x,y坐标。

 

private void setPrint(Document doc,String title,String scale,int width,int height,double mapWidth,double mapHeight,String imgUrl,String cpath,String imgname,String dataSet,String realPath) throws Exception{

       //set page size

       Element root = doc.getRootElement();

       root.setAttribute(new Attribute("pageWidth",String.valueOf(width)));//设置整个页面宽

       root.setAttribute(new Attribute("pageHeight",String.valueOf(height)));//设置整个页面高

       BillXML billXml=new BillXML();

       int leftMargin = Integer.valueOf(root.getAttributeValue("leftMargin"));//左边距

       int rightMargin = Integer.valueOf(root.getAttributeValue("rightMargin"));//右边距

       int topMargin = Integer.valueOf(root.getAttributeValue("topMargin"));//上边距

       int bottomMargin = Integer.valueOf(root.getAttributeValue("bottomMargin"));//下边距

       root.setAttribute(new Attribute("columnWidth",String.valueOf(Integer.valueOf(width - leftMargin - rightMargin).intValue())));//设置内容显示区域的宽

       //p0

       Element summary = billXml.selectElement(doc, "summary");

       Element su_band = billXml.selectElement(summary, "band");

       Element su_image = billXml.selectElement(su_band, "image");

       Element su_reportElement = billXml.selectElement(su_image, "reportElement");

       Element su_imageExpression = billXml.selectElement(su_image, "imageExpression");

       //images

       Element pageFooter = billXml.selectElement(doc, "pageFooter");

       Element pf_band = billXml.selectElement(pageFooter, "band");

       List images = billXml.selectListElement(pf_band, "image");

       //north_img

       Element north_img = (Element)images.get(1);

       Element north_img_reportElement = billXml.selectElement(north_img, "reportElement");

       Element north_img_imageExpression = billXml.selectElement(north_img, "imageExpression");

       int north_img_w = Integer.valueOf(north_img_reportElement.getAttributeValue("width"));

       int north_img_h = Integer.valueOf(north_img_reportElement.getAttributeValue("height"));

       //logo_img

       Element logo_img = (Element)images.get(0);

       Element logo_img_reportElement = billXml.selectElement(logo_img, "reportElement");

       Element logo_img_imageExpression = billXml.selectElement(logo_img, "imageExpression");

       int logo_img_w = Integer.valueOf(logo_img_reportElement.getAttributeValue("width"));

       int logo_img_h = Integer.valueOf(logo_img_reportElement.getAttributeValue("height"));

       //staticTexts

       List staticTexts = billXml.selectListElement(pf_band, "staticText");

       //t1

       Element t1 = (Element)staticTexts.get(0);

       Element t1_reportElement = billXml.selectElement(t1, "reportElement");

       Element t1_text = billXml.selectElement(t1, "text");

       int t1_w = Integer.valueOf(t1_reportElement.getAttributeValue("width"));

       int t1_h = Integer.valueOf(t1_reportElement.getAttributeValue("height"));

       //t2

       Element t2 = (Element)staticTexts.get(1);

       Element t2_reportElement = billXml.selectElement(t2, "reportElement");

       Element t2_text = billXml.selectElement(t2, "text");

       int t2_w = Integer.valueOf(t2_reportElement.getAttributeValue("width"));

       int t2_h = Integer.valueOf(t2_reportElement.getAttributeValue("height"));

       //t3

       Element t3 = (Element)staticTexts.get(2);

       Element t3_reportElement = billXml.selectElement(t3, "reportElement");

       Element t3_text = billXml.selectElement(t3, "text");

       int t3_w = Integer.valueOf(t3_reportElement.getAttributeValue("width"));

       int t3_h = Integer.valueOf(t3_reportElement.getAttributeValue("height"));

       //t4

       Element t4 = (Element)staticTexts.get(3);

       Element t4_reportElement = billXml.selectElement(t4, "reportElement");

       Element t4_text = billXml.selectElement(t4, "text");

       int t4_w = Integer.valueOf(t4_reportElement.getAttributeValue("width"));

       int t4_h = Integer.valueOf(t4_reportElement.getAttributeValue("height"));

       //set summary height

       int summary_w = width - leftMargin - rightMargin;

       int summary_h = height-(topMargin + bottomMargin + t1_h + north_img_h + logo_img_h);

分享到:
评论

相关推荐

    云端Web GIS

    #### 四、Web地图打印出图 Web地图的打印出图功能也是非常重要的一环,特别是对于需要在离线状态下查看地图数据的场景。ArcGIS Online提供了多种打印选项: 1. **使用ArcMap操作**:这是一种较为传统的打印方式,...

    ArcGISServer ADF web打印程序源码 CSharp

    此资源中的"Web打印程序源码"提供了在Web应用程序中实现地图打印功能的方法。CSharp是一种面向对象的编程语言,广泛应用于Windows平台的开发,包括GIS应用。源码注释使用英文,这表明它是面向国际开发者社区的,英文...

    基于Arcengine的地图打印小程序

    【ArcEngine地图打印小程序】是一款基于C#编程语言开发的GIS应用,专为ArcEngine初学者设计。ArcEngine是Esri公司提供的一个强大的GIS开发组件,允许开发者创建各种地理信息系统应用,包括桌面、Web和移动平台。这个...

    SuperMap GIS应用与开发

    5. **地图制作与发布**:SuperMap GIS提供了丰富的符号库和地图样式,你可以学习如何创建美观且信息丰富的地图,并通过打印或Web服务进行发布。 6. **SuperMap iServer与Web GIS**:SuperMap iServer是SuperMap GIS...

    SuperMap Objects .NET 打印地图

    打印地图是GIS应用中的常见需求。在SuperMap Objects .NET中,这个过程通常涉及到以下步骤: 1. 初始化地图对象:首先,我们需要创建一个地图实例,并设置其数据源和初始视图。 2. 创建打印任务:通过`SuperMap)...

    Gis实现的地图浏览

    7. **地图服务**:GIS应用可能需要连接到Web地图服务(如WMS、WFS),获取远程地图数据。MapX支持与这些服务的集成,开发者需要理解服务的协议和调用方式。 8. **自定义样式和符号**:为了更好地展示地理信息,...

    frmPageLayout.rar_arcengine _arcengine 比例尺_地图打印_打印地图_整饰

    3. **地图打印**:地图打印是GIS应用中的常见需求,通过ArcEngine,开发者可以控制打印的布局、比例、方向等参数,实现高质量的地图输出。本项目中,可能使用了ArcEngine的PrintTask类来实现地图的打印功能。 4. **...

    Silverlight For GIs 多例子

    这个主题涵盖了一系列的功能实现,包括图层管理、动态图层控制、地图打印预览与打印功能、地图的拖拽缩放以及定位查询等核心GIS交互操作。 首先,Silverlight是微软推出的一种富互联网应用程序(RIA)框架,它允许...

    arcgis api 3.x for js 入门开发系列十二地图打印GP服务.zip

    除了基本的地图打印,还可以结合其他GIS功能,如动态图层、查询、分析等,实现更复杂的地图应用。例如,根据用户选择的区域动态加载数据,再进行打印。 通过以上知识点,你可以开始使用ArcGIS API 3.x for ...

    三个有关gis的中文文档

    这三份文档为GIS初学者提供了全面的学习资源,不仅讲解了基础的GIS地图绘制技巧,还深入到高级的Web地图服务发布。通过学习这些内容,读者可以掌握使用ArcGIS进行地理数据分析和地图制作的核心技能。

    c++用于GIS二次开发

    5. **地图渲染**:地图的显示和打印是GIS应用的重要部分。开发者需要学习如何使用C++来渲染地图,包括符号化规则、颜色映射、比例尺控制等。 6. **性能优化**:由于GIS数据通常较大,性能优化是必不可少的。这可能...

    arcgis api 3.x for js 入门开发系列十二地图打印GP服务源码

    地图打印是GIS应用中的重要功能,尤其在需要将地图数据导出或记录特定区域时非常实用。通过学习和实践这个源码,开发者可以提升自己在WebGIS开发方面的技能,更好地服务于各类地理信息系统的开发需求。

    arcgis for js加载百度地图高德地图天地图

    在GIS领域,ArcGIS for JavaScript(arcgis for js)是一个强大的Web地图开发库,它允许开发者将地理信息系统功能集成到Web应用中。本教程将详细阐述如何利用ArcGIS for JavaScript API来加载百度地图、高德地图和天...

    开源GIS视频课程.rar

    2. **开源GIS软件选择**:对比分析不同开源GIS软件,如QGIS的桌面应用,MapServer的Web地图服务,以及GeoServer的数据发布功能,帮助学员选择适合自己的工具。 3. **数据采集与管理**:讲解如何导入、导出和管理...

    大连矢量地图

    因此,矢量地图在缩放时不会出现像素化的模糊现象,非常适合用于高精度的地理分析和地图打印。而大连矢量地图作为城市级别的数据,包含了该市的行政区域、道路网络、建筑物、公共设施等各种地理要素。 在描述中提到...

    基于WEB-GIS的大同市矿山地质环境动态遥感监测系统.pdf

    快速出图模块方便用户打印地图,便于日常工作。 矿山地质环境系统则包含时间轴、遥感解译、地质灾害和二三维一体化模块。时间轴功能能够直观展示不同年份的地质环境变化,用户可以对比不同时间点的地块变化;遥感...

    arc gis开发

    ArcGIS是Esri公司开发的一套强大的GIS软件系统,它不仅包括桌面GIS应用,如ArcMap、ArcCatalog等,还涵盖了服务器端组件、Web应用以及移动设备上的应用。ArcGIS被广泛应用于资源管理、城市规划、环境保护、灾害管理...

    C#开发GIS应用简明教程

    2. **.NET Framework和GIS库**:C#开发GIS应用通常会利用.NET Framework中的GIS库,如ESRI的ArcObjects或开源的GDAL/OGR、SharpMap等。这些库提供了丰富的GIS功能,包括空间数据读取、处理、分析和显示。 3. **空间...

    基于ArcObjects与C#.NET的GIS应用开发

    6. 服务发布:借助ArcGIS Server,可以将开发的应用程序作为GIS服务发布,实现Web GIS的应用。 在实际项目中,开发者还需要关注性能优化、错误处理、多线程编程等方面的问题。同时,理解GIS的基本概念和原理,如...

    gis png 一套图标

    这些GIS图标在GIS软件开发、Web GIS应用、移动GIS应用等方面都有广泛的应用。 在压缩包“gis_png24”中,很可能包含了上述各类GIS功能的PNG图标,每一种图标都可能有不同的样式和颜色主题,以适应不同的设计需求。...

Global site tag (gtag.js) - Google Analytics