答案 0 :(得分:1)
使用您显示的数据结构实现这种布局通常通过使用子报表(或列表/表组件)来完成
结构将是:
主要报告,迭代所有x
包括subreport 1
y
和z
传递List<Y> list
作为数据源。
子报告1,迭代所有y
,包括subreport 2
z
,List<Z> list
作为数据源传递z
。
子报告2,迭代所有new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{list})
。
要生成数据源,JRBeanCollectionDataSource可以为您提供示例stretchType
要实现 rowspan ,请使用reportElement
上的<textField>
<reportElement stretchType="RelativeToTallestObject" x="0" y="0" width="100" height="20" uuid="bf6b550c-f37d-4e10-b8dd-1d91c4e6905a"/>
<textElement verticalAlignment="Middle"/>
<font size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{x}]]></textFieldExpression>
</textField>
属性(RelativeToBandHeight或RelativeToTallestObject)
实施例
<jr:list>
您不喜欢子报告,对于一个级别结构,可以使用var map = L.map('map');
var osm = L.tileLayer('http://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>, Tiles courtesy of <a href="http://hot.openstreetmap.org/" target="_blank">Humanitarian OpenStreetMap Team</a>'
});
var geojsonFeature = [{
"type": "Feature",
"properties": {
"id": "marker1",
"name": "Coors Field"
},
"geometry": {
"type": "Point",
"coordinates": [-104.99404, 39.75621]
}
}, {
"type": "Feature",
"properties": {
"id": "marker2",
"name": "School",
},
"geometry": {
"type": "Point",
"coordinates": [-104.69404, 38.85621]
}
}];
var markerLayer = L.geoJson(null, {
pointToLayer: function(feature, latlng) {
return L.marker(latlng, {});
},
onEachFeature: function(feature, layerinfo) {
if (feature.properties) {
var content = "<table class='table table-striped table-bordered table-condensed'>" + "<tr><th>Name</th><td>" + feature.properties.name + "<table>";
layerinfo.bindPopup(content, {
closeButton: true
});
}
}
});
markerLayer.addData(geojsonFeature);
markerLayer.addTo(map);
map.fitBounds(markerLayer.getBounds());
map.setZoom(16);
map.addLayer(osm);
组件,请参阅samples
答案 1 :(得分:0)
我们遇到了同样的问题,经过一段时间的搜索,我们决定使用jasper-report html组件解决它。它的作用是,它允许我们在报告中添加html内容。因此,我们生成了html内容并将其存储在数据库中。并在jasper报告中插入html数据。希望这可以帮助。