制作布局模板

发送反馈


Web 打印服务是使用一个布局模板来输出可打印的地图文档。iServer 支持加载 Jaspersoft Studio 软件制作的布局模板。Jaspersoft Studio 是一种较为通用的文档模板格式,可导出为 jrxml 文件进行分发,下载地址为:https://community.jaspersoft.com/project/jaspersoft-studio

使用默认布局模板

iServer 内置多个布局模板,位于【iServer根目录】/webapps/iserver/templates/webprinting-layouts 目录中,每个布局模板内容是一个以布局模板名称命名的文件夹。下面以 A4_landscape(A4 横板)为例,具体介绍下该文件夹中包含的文件:

此外,每个布局模板文件夹中还提供了多个 *.json 的请求体示例,在创建打印任务时,输入的请求体可参考这些请求示例。

您还可以通过 layoutTemplates 资源的 GET 请求或直接访问 iSrever 的布局列表资源页面(iserver/services/webprinting/rest/v1/webprinting/layouts)查看所有的布局模板。这些布局模板包括横向和纵向的A2、A3和A4纸张大小。每个布局模板包含地图标题、指北针、图例、比例尺、地图作者信息、地图版权信息以及小地图等。在创建打印任务时,请求体中的 layoutOptions 对象中的 templateName 参数指定内置的布局模板文件夹名称。

如果 iServer 内置的布局模板无法满足您的使用需求,您可以通过传参方式更新布局元素内容,也可以根据您的使用需求自定义布局模板。

通过传参方式更新布局元素内容

创建打印任务时,您可以在请求体中通过传参方式更新布局元素内容,主要是对请求体中 layoutOptions 对象中的各个参数进行修改,具体请参阅 webPrintingJobs 资源的 POST 请求。支持修改以下布局元素内容:

自定义布局模板

如果以上通过传参方式更新布局元素内容无法满足您的使用需求,您还可以自定义布局模板,如,调整布局元素位置、删除或添加布局元素等,可直接对 iServer 内置的布局模板(位于【iServer根目录】/webapps/iserver/templates/webprinting-layouts 目录中)进行修改,修改完成后,需重启 iServer 才能生效。以 A4_landscape(A4 横板)为例,需要修改以下三个文件:

  1. A4_landscape.jrxml 文件:布局模板文件,包含地图标题、指北针、图例、比例尺、地图作者信息、地图版权信息以及小地图等布局元素,可以在 Jaspersoft Studio 软件中进行调整。
  2. legend.jrxml 文件:图例的模板文件,可以在 Jaspersoft Studio 软件中对图例进行调整。图例包括两种方式,一种是直接传入图片方式,该方式中图例图片的大小要与 A4_landscape.jrxml 文件中图例大小保持一致;另一种是 key-value形式,即传入图例的元素图片和元素名称,legend.jrxml 文件中定义了图例元素图片的大小,以及图例元素图片+名称所在行的宽度,还有图例元素的列数。
  3. config.yaml 文件:布局模板的配置文件,如果新增或删除某个布局元素,配置文件对应部分内容要做同步修改。

具体操作步骤如下:

  1. 通过 Jaspersoft Studio 软件自定义布局模板
  2. 修改 config.yaml 文件(如果在 Jaspersoft Studio 软件中新增或删除了某个布局元素)

通过 Jaspersoft Studio 软件自定义布局模板

首先简单介绍一下 Jaspersoft Studio 软件中各个主要部分,如下图所示:

  1. 布局模板的编辑区域,已添加的布局元素可以通过拖拽的方式调整其位置和大小。提供了 Design(设计视图)、Source(源码视图)和 Preview(预览视图)选项卡,iServer 插入的地图元素不支持预览选项卡。
  2. 可插入布局模板中的元素,iServer 内置的布局模板用到的元素包括:Text Field(文本)、Image(图片)、Subreport(子报告,用于添加地图、小地图、图例元素)。
  3. 布局模板中每个元素对应的参数、变量等。
  4. 所选布局元素的属性窗口,可以设置布局元素的样式、关联参数的表达式等。
  5. 预先配置字段的快捷方式。
  6. 数据连接(不适用于 iServer 布局模板)。
  7. 信息和错误的控制台。

如以上2号窗体所示,iServer 内置布局模板中的元素对应Jaspersoft Studio 软件中的三种元素:Text Field(文本)、Image(图片)、Subreport(子报告,用于添加地图、小地图、图例元素),下面分别介绍如何进行添加或删除。

Text Field(文本)

iServer 内置布局模板中的地图主标题、副标题、作者信息、版权信息都属于Text Field(文本),添加方式一样,具体步骤如下:

  1. 添加元素:在2号窗体中选择 Text Field,在1号区域绘制一个文本元素
  2. 新建参数:在3号区域右键点击 Parameters,选择 Create Parameter,新建一个参数,在4号区域修改Name(参数名称),Class(类型)选择 java.lang.String。您也可以直接在 Source(源码视图)中添加参数,代码如下:

<parameter name="title" class="java.lang.String"/>

  1. 添加的元素与参数通过表达式进行关联:在1号区域点击添加的布局元素,然后在4号区域选择 Text Field,单击 Expression 后面的按钮,在弹出的对话框中,选择左侧的 Parameters,在列出的参数列表中,双击选择刚刚添加的参数,点击 Finish。您也可以直接在 Source(源码视图)中,在添加的元素标签中添加表达式,代码如下:

<textField>

    ......

    <textFieldExpression><![CDATA[$P{subTitle}]]></textFieldExpression>

</textField>

通过以上三步,一个文本元素就添加完成了,你还可以调整文本框的大小、字体、字号等等。

Image(图片)

iServer 内置布局模板中的指北针、比例尺都属于Image(图片),添加方式一样,具体步骤如下:

  1. 添加元素:在2号窗体中选择 Image,在1号区域绘制一个图片元素
  2. 新建参数:在3号区域右键点击 Parameters,选择 Create Parameter,新建一个参数,在4号区域修改Name(参数名称),Class(类型)选择 java.lang.String。您也可以直接在 Source(源码视图)中添加参数,代码如下:

<parameter name="northArrowGraphic" class="java.lang.String"/>

  1. 添加的元素与参数通过表达式进行关联:可以直接在 Source(源码视图)中,在添加的元素标签中添加表达式,代码如下:

<image>

    ......

    <imageExpression><![CDATA[net.sf.jasperreports.renderers.BatikRenderer.getInstance(new java.io.File(new java.net.URI($P{northArrowGraphic})))]]></imageExpression>

</image>

通过以上三步,一个图片元素就添加完成了,你还可以调整图片框的大小、位置等等。

Subreport(子报告)

iServer 内置布局模板中的地图、小地图、图例都需要通过 Subreport(子报告)来添加,添加方式一样,具体步骤如下:

  1. 添加元素:在2号窗体中选择 Subreport,在1号区域绘制一个子报告元素
  2. 新建参数:在3号区域右键点击 Parameters,选择 Create Parameter,新建一个参数,在4号区域修改Name(参数名称),Class(类型)选择 java.lang.String。您也可以直接在 Source(源码视图)中添加参数,代码如下:

<parameter name="mapSubReport1" class="java.lang.String"/>

  1. 添加的元素与参数通过表达式进行关联:可以直接在 Source(源码视图)中,在添加的元素标签中添加表达式,代码如下:

<subreport>

    ......

    <subreportExpression><![CDATA[$P{mapSubReport1}]]></subreportExpression>

</subreport>

通过以上三步,一个子报告元素就添加完成了,你还可以调整子报告的大小、位置等等。

如果要删除以上添加的元素,需要在 1 号区域将元素删除,还需要在3号区域,将对应的参数删除。

修改 config.yaml 文件

通过 Jaspersoft Studio 软件自定义的布局模板,如果新增或删除了某个布局元素,还需在 config.yaml 文件中新增或删除相关内容。以下是A4_landscape(A4 横板)的config.yaml 文件内容和注释:

templates:

  #===========================================================================

  A4 landscape: !template

  #===========================================================================

    reportTemplate: A4_landscape.jrxml     //布局模板名称

    attributes:                                            //属性信息

      map: !map                                         //地图

        maxDpi: 400                                    //地图的最大 dpi

        width: 800                                       //地图框的宽

        height: 410                                      //地图框的高

      littleMap: !map                                  //小地图

        width: 150                                       //小地图框的宽

        height: 200                                      //小地图框的高

        maxDpi: 400                                    //小地图的最大 dpi

      title: !string {}                                     //地图的主标题

      subTitle: !string {}                               //地图的副标题

      copyright: !string {}                            //地图的版权信息

      author: !string {}                                //地图的作者信息

      legendOptions: !legend                                  //图例

        default:

          columnnumber: 3                          //图例元素的列数,默认3列

      northArrowOptions: !northArrow             //指北针

        size: 40                                            //指北针的图框

        createSubReport: false

        default:

          picAsUrl: "file://NorthArrow.svg"    //指北针的图片

          backgroundColor: "rgba(214, 214, 214, 0)"        //指北针的图框背景色,默认透明

      scaleBarOptions: !scalebar                                                 //比例尺条

        width: 240                                                           //比例尺条的宽

        height: 50                                                           //比例尺条的高

        createSubReport: false

        default:

          backgroundColor: "rgba(214, 214, 214, 0)"       //比例尺条的背景色,默认透明

          font: "黑体"                                                      //比例尺文本的字体

          fontSize: 12                                                     //比例尺文本的字体大小

          fontColor: "black"                                           //比例尺文本的字体颜色

          scaleBarVisible: true                                        //是否显示比例尺条,默认值:true,显示比例尺条

          align: "center"                                                 //比例尺的位置

    processors:                                                            //操作

    - !reportBuilder # compile all reports in current directory

      directory: '.'

    - !createMap                                                        //新建地图

      inputMapper:                                                     //地图的输入

        map: map                                                        //地图的类型

      outputMapper:                                                  //地图的输出

        mapSubReport: mapSubReport1                     //对应 Jaspersoft Studio 软件中地图子报告名称

        mapContext: mapContext1

    - !createMap                                                       //新建小地图

      inputMapper:                                                    //小地图的输入

        littleMap: map                                                 //小地图的类型

      outputMapper:                                                 //小地图的输出

        mapSubReport: mapSubReport2                     //对应 Jaspersoft Studio 软件中小地图子报告名称

        mapContext: mapContext2

    - !createScalebar                                                 //新建比例尺

        inputMapper:                                                  //比例尺的输入

            mapContext1: mapContext                        //比例尺指定的地图

    - !createNorthArrow                                          //新建指北针

        inputMapper:                                                 //指北针的输入

            northArrowDef: northArrow                       //指北针的类型

            map: map                                                  //指北针指定的地图

    - !prepareLegend # create a datasource for the report with the 'legend' attribute

        template: legend.jrxml                                    //关联的图例模板名称

您通过 Jaspersoft Studio 软件自定义的布局模板如果新增或删除了某个布局元素,需要在以上 config.yaml 文件中 attributes 和 processors 两部分内容中新增或删除对应的元素内容。

示例1:去掉默认布局模板中的小地图

  1. 下载并安装 Jaspersoft Studio 软件。
  2. 双击打开布局模板文件(位于【iServer根目录】/webapps/iserver/templates/webprinting-layouts 目录中),以 A3_landscape.jrxml 为例,在 Jaspersoft Studio 软件中打开,将下图中1所示的小地图的两个框删掉,将图中2所示的小地图参数删掉。

  1. 将 config.yaml 中小地图部分的代码删掉,如下图所示,红框中的内容去掉:

  1. 创建打印任务时,发送的请求体中无需再传 "littleMapOptions" 参数,如下图红框中的内容去掉:

完成以上1、2、3步修改后,重启 iServer,然后将4步不带小地图的请求体发送给iServer Web打印服务后,输出的地图文档就没有小地图了。

示例2:添加地图的四个角标

针对一些实际的项目需求,iServer 默认提供了一个带四个角标的A3横版布局模板(位于【iServer根目录】/webapps/iserver/templates/webprinting-layouts/A3_mapcornermarks 文件夹中),您在创建打印任务时,可以直接使用该模板,效果如下图所示。

当然,您也可以通过以下方式,在已有的默认布局模板中手动添加四个角标。需要注意的是,添加四个角标的功能暂不支持有小地图的布局模板,如果您使用的布局模板里有小地图,需要参考上面的示例1去掉小地图。

  1. 下载并安装 Jaspersoft Studio 软件。
  2. 双击打开布局模板文件(位于【iServer根目录】/webapps/iserver/templates/webprinting-layouts 目录中),以 A4_landscape.jrxml 为例,在 Jaspersoft Studio 软件中打开
  3. 建议添加两个 StaticText 作为四个角标的框
  4. 添加一个变量,名字叫:mapCornerMarks,类型为:java.lang.String
  5. 四个角标一共需要添加 24 个 textField,每个 textField 的大小建议:宽 15px,高 12px,字体大小建议 6,每个 textField 的Expression 内容和角标实际意义对应如下表所示:
textFieldExpression 角标实际意义
($P{mapCornerMarks}.split(","))[0] 左上经度的度
($P{mapCornerMarks}.split(","))[1] 左上经度的分
($P{mapCornerMarks}.split(","))[2] 左上经度的秒
($P{mapCornerMarks}.split(","))[3] 左上经度的度
($P{mapCornerMarks}.split(","))[4] 左上经度的分
($P{mapCornerMarks}.split(","))[5] 左上经度的秒
($P{mapCornerMarks}.split(","))[6] 左上经度的度
($P{mapCornerMarks}.split(","))[7] 左上经度的分
($P{mapCornerMarks}.split(","))[8] 左上经度的秒
($P{mapCornerMarks}.split(","))[9] 左上经度的度
($P{mapCornerMarks}.split(","))[10] 左上经度的分
($P{mapCornerMarks}.split(","))[11] 左上经度的秒
($P{mapCornerMarks}.split(","))[12] 左上经度的度
($P{mapCornerMarks}.split(","))[13] 左上经度的分
($P{mapCornerMarks}.split(","))[14] 左上经度的秒
($P{mapCornerMarks}.split(","))[15] 左上经度的度
($P{mapCornerMarks}.split(","))[16] 左上经度的分
($P{mapCornerMarks}.split(","))[17] 左上经度的秒
($P{mapCornerMarks}.split(","))[18] 左上经度的度
($P{mapCornerMarks}.split(","))[19] 左上经度的分
($P{mapCornerMarks}.split(","))[20] 左上经度的秒
($P{mapCornerMarks}.split(","))[21] 左上经度的度
($P{mapCornerMarks}.split(","))[22] 左上经度的分
($P{mapCornerMarks}.split(","))[23] 左上经度的秒
  1. 在 config.yaml 中添加如下内容,如粗体所示:

      ......

      author: !string {}

      mapCornerMarks: !string

        default: ""

      legendOptions: !legend

      ......

  1. 完成以上步骤后,重启 iServer,然后将使用四个角标的布局模板的请求体发送给 iServer 的 Web 打印服务后,输出的地图文档就带四个角标了。