jasper-reports - 如何从参数创建包含静态和动态值的表?
问题描述
我想创建一个具有静态和动态值的表,如下图所示:
如您所见,红色值是动态的(参数中的值),而表的其余部分是静态的。
问题是我不能向表中添加多个详细信息行。
即使我使用普通文本字段和静态文本元素而不是表格,我也无法在不重叠的情况下拉伸值(以防一个值需要多于一行)。
我怎样才能做到这一点?
解决方案
要使用jr:table
组件,您需要有一个数据源,通常List
您应该从一些后端代码中获取数据,例如将其作为参数传递给报表。因此,不是传递单个参数,而是传递具有名称和值的数据源。
然而,为了好玩?我们也可以在 jrxml 代码中创建一个数据源,例如在你的情况下我会使用ListOfArrayDataSource(java.util.List<java.lang.Object[]> records, java.lang.String[] columnNames)
创建前两个条目的代码将是这样的。
new net.sf.jasperreports.engine.data.ListOfArrayDataSource(
Arrays.asList(
new String[]{"Name", $P{name}},
new String[]{"Date of Birth", $P{dateOfBirth}}
),
new String[]{"c1", "c2"}
)
完整的jrxml
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Blank_A4_15" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="342c93fd-9f0b-49db-a6e8-dbc252bbeca4">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<style name="Table_TD" mode="Opaque" backcolor="#FFFFFF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
<topPen lineWidth="0.5" lineColor="#000000"/>
<leftPen lineWidth="0.5" lineColor="#000000"/>
<bottomPen lineWidth="0.5" lineColor="#000000"/>
<rightPen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<subDataset name="Dataset" uuid="604ce812-0b69-47fa-862f-c6b4356c6b62">
<queryString>
<![CDATA[]]>
</queryString>
<field name="c1" class="java.lang.String"/>
<field name="c2" class="java.lang.String"/>
</subDataset>
<parameter name="name" class="java.lang.String">
<defaultValueExpression><![CDATA["Nasser Ali"]]></defaultValueExpression>
</parameter>
<parameter name="dateOfBirth" class="java.lang.String">
<defaultValueExpression><![CDATA["1985-10-07"]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[]]>
</queryString>
<title>
<band height="61" splitType="Stretch">
<staticText>
<reportElement mode="Opaque" x="0" y="1" width="400" height="30" forecolor="#FFFFFF" backcolor="#000000" uuid="56949b5f-9b21-4f88-9660-ddccce0e7cad"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="12" isBold="true"/>
</textElement>
<text><![CDATA[Personal information]]></text>
</staticText>
<componentElement>
<reportElement x="0" y="31" width="400" height="30" uuid="7a9309f0-4b5f-4c01-9b0a-611807b01f96">
<property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.VerticalRowLayout"/>
<property name="com.jaspersoft.studio.table.style.table_header" value="Table_TH"/>
<property name="com.jaspersoft.studio.table.style.column_header" value="Table_CH"/>
<property name="com.jaspersoft.studio.table.style.detail" value="Table_TD"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
<datasetRun subDataset="Dataset" uuid="f682c987-479a-40f9-8b97-bf07577e67fa">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.ListOfArrayDataSource(Arrays.asList(new String[]{"Name", $P{name}}, new String[]{"Date of Birth", $P{dateOfBirth}}),new String[]{"c1", "c2"})]]></dataSourceExpression>
</datasetRun>
<jr:column width="200" uuid="c087b83b-e6f9-4366-b655-eb7c14e35745">
<property name="com.jaspersoft.studio.components.table.model.column.name" value="Column1"/>
<jr:detailCell style="Table_TD" height="30">
<textField>
<reportElement x="0" y="0" width="200" height="30" uuid="dce0c9d6-ec99-4cbb-b981-73d3dff1b67b"/>
<box leftPadding="5"/>
<textElement verticalAlignment="Middle">
<font size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{c1}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<jr:column width="200" uuid="dad64648-00cb-46ff-9f74-216170605bf6">
<property name="com.jaspersoft.studio.components.table.model.column.name" value="Column2"/>
<jr:detailCell style="Table_TD" height="30">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
<textField>
<reportElement x="0" y="0" width="200" height="30" forecolor="#FF0400" uuid="05d673a9-93d4-4b3e-a4eb-6fd5fd171b30"/>
<box leftPadding="5"/>
<textElement verticalAlignment="Middle">
<font size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{c2}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
</jr:table>
</componentElement>
</band>
</title>
</jasperReport>
输出:
推荐阅读
- regex - 匹配不以#、$、开头的变量名的正则表达式
- javascript - 如何操作包含在对象标签中的 svg 文件
- java - hibernate 是否生成表并使用模型将数据库更改为 mySQL?
- ios - Selenium Grid 显示 4 个请求等待插槽空闲
- reactjs - reactjs中如何导出组件
- python - AttributeError:“DataFrame”对象没有属性“Class”
- jmeter - 在 JMeter 中配置没有端口号的 HTTP 采样器
- python - 在特定列Python中选择具有唯一值的csv行
- php - 使用 SDK for PHP 从谷歌驱动器下载 zip 文件
- html - 如何将字符串转换为html?