制作布局模板 |
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 横板)为例,需要修改以下三个文件:
具体操作步骤如下:
首先简单介绍一下 Jaspersoft Studio 软件中各个主要部分,如下图所示:
如以上2号窗体所示,iServer 内置布局模板中的元素对应Jaspersoft Studio 软件中的三种元素:Text Field(文本)、Image(图片)、Subreport(子报告,用于添加地图、小地图、图例元素),下面分别介绍如何进行添加或删除。
Text Field(文本)
iServer 内置布局模板中的地图主标题、副标题、作者信息、版权信息都属于Text Field(文本),添加方式一样,具体步骤如下:
<parameter name="title" class="java.lang.String"/>
<textField>
......
<textFieldExpression><![CDATA[$P{subTitle}]]></textFieldExpression>
</textField>
通过以上三步,一个文本元素就添加完成了,你还可以调整文本框的大小、字体、字号等等。
Image(图片)
iServer 内置布局模板中的指北针、比例尺都属于Image(图片),添加方式一样,具体步骤如下:
<parameter name="northArrowGraphic" class="java.lang.String"/>
<image>
......
<imageExpression><![CDATA[net.sf.jasperreports.renderers.BatikRenderer.getInstance(new java.io.File(new java.net.URI($P{northArrowGraphic})))]]></imageExpression>
</image>
通过以上三步,一个图片元素就添加完成了,你还可以调整图片框的大小、位置等等。
Subreport(子报告)
iServer 内置布局模板中的地图、小地图、图例都需要通过 Subreport(子报告)来添加,添加方式一样,具体步骤如下:
<parameter name="mapSubReport1" class="java.lang.String"/>
<subreport>
......
<subreportExpression><![CDATA[$P{mapSubReport1}]]></subreportExpression>
</subreport>
通过以上三步,一个子报告元素就添加完成了,你还可以调整子报告的大小、位置等等。
如果要删除以上添加的元素,需要在 1 号区域将元素删除,还需要在3号区域,将对应的参数删除。
通过 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、2、3步修改后,重启 iServer,然后将4步不带小地图的请求体发送给iServer Web打印服务后,输出的地图文档就没有小地图了。
针对一些实际的项目需求,iServer 默认提供了一个带四个角标的A3横版布局模板(位于【iServer根目录】/webapps/iserver/templates/webprinting-layouts/A3_mapcornermarks 文件夹中),您在创建打印任务时,可以直接使用该模板,效果如下图所示。
当然,您也可以通过以下方式,在已有的默认布局模板中手动添加四个角标。需要注意的是,添加四个角标的功能暂不支持有小地图的布局模板,如果您使用的布局模板里有小地图,需要参考上面的示例1去掉小地图。
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] | 左上经度的秒 |
......
author: !string {}
mapCornerMarks: !string
default: ""
legendOptions: !legend
......