Jasper reports 将报告结果分为两列
我想将报告结果分成两列以获得输出(使用Jasper Studio):Jasper reports 将报告结果分为两列,jasper-reports,Jasper Reports,我想将报告结果分成两列以获得输出(使用Jasper Studio): 结果行1结果行4 结果行2结果行5 结果行3 根据我设置的列计数值为2,打印顺序为水平。 但在这种情况下,我得到一个输出: 结果行1结果行2 结果行3结果行4 结果行5 当我将打印顺序设置为垂直时,我得到: 结果行1 结果行2 结果行3 结果行4 结果行5 只有当我设置了小的页面高度,我才能得到所需的输出。但行数总是不同的。所以我不能硬编码那个小的页面高度。有没有可能以某种方式计算出来 那么,如何获得所需的输出呢 下面是一个简
结果行1
结果行4
结果行2
结果行5
结果行3
根据我设置的列计数值为2,打印顺序为水平。
但在这种情况下,我得到一个输出:
结果行1
结果行2
结果行3
结果行4
结果行5
当我将打印顺序设置为垂直时,我得到:
结果行1
结果行2
结果行3
结果行4
结果行5
只有当我设置了小的页面高度,我才能得到所需的输出。但行数总是不同的。所以我不能硬编码那个小的页面高度。有没有可能以某种方式计算出来
那么,如何获得所需的输出呢
下面是一个简单的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="test2" columnCount="2" printOrder="Horizontal" pageWidth="595" pageHeight="842" columnWidth="277" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="481b7288-0681-43c8-b039-9e95ef42c274">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="New Data Adapter (12)"/>
<queryString language="jsonql">
<![CDATA[array]]>
</queryString>
<field name="result" class="java.lang.String">
<property name="net.sf.jasperreports.jsonql.field.expression" value="result"/>
<fieldDescription><![CDATA[result]]></fieldDescription>
</field>
<columnHeader>
<band height="61" splitType="Stretch">
<staticText>
<reportElement x="29" y="0" width="100" height="30" uuid="2d1cbfb0-be49-4f6e-8cd2-1e641ae6e21b">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="c95f114a-b4bc-439b-aff0-23268822dc5d"/>
</reportElement>
<text><![CDATA[result]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="125" splitType="Stretch">
<textField>
<reportElement x="29" y="10" width="100" height="30" uuid="e9e3c344-22bd-4614-9adf-8bbd7a69bf96">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="c95f114a-b4bc-439b-aff0-23268822dc5d"/>
</reportElement>
<textFieldExpression><![CDATA[$F{result}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
本例中使用了JSON数据适配器。
以下是数据适配器json文件的内容:
{“数组”:[
{
“ind”:1,
“结果”:“第1行”
},
{
“ind”:2,
“结果”:“第2行”
},
{
“ind”:3,
“结果”:“第3行”
},
{
“ind”:4,
“结果”:“第4行”
},
{
“ind”:5,
“结果”:“第5行”
}
]
}
UPD:我找到了解决方案。我已经将报表分为两个子报表:一个子报表是左栏,另一个子报表是右栏。在这些子报表中,我检查
$V{REPORT\u COUNT}
,并将其与printWheenexpression
中的numberOfRecords/2
进行比较,以将结果分为两部分。下面是一个示例,说明如果在数据集中有COUNT,如何执行此操作。还要注意的是,只有在报告以单页结尾时,它才会起作用-
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.15.0.final using JasperReports Library version 6.15.0-dd49bfb94918336b8321d5507193f0169ead4e95 -->
<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="test2" columnCount="2" pageWidth="595" pageHeight="842" columnWidth="277" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="481b7288-0681-43c8-b039-9e95ef42c274">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="SampleDB"/>
<property name="com.jaspersoft.studio.data.sql.tables" value=""/>
<property name="com.jaspersoft.studio.unit." value="pixel"/>
<property name="com.jaspersoft.studio.unit.pageHeight" value="pixel"/>
<property name="com.jaspersoft.studio.unit.pageWidth" value="pixel"/>
<property name="com.jaspersoft.studio.unit.topMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.bottomMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.leftMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.rightMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.columnWidth" value="pixel"/>
<property name="com.jaspersoft.studio.unit.columnSpacing" value="pixel"/>
<queryString>
<![CDATA[select result, count
from sampletable]]>
</queryString>
<field name="result" class="java.lang.Long">
<property name="com.jaspersoft.studio.field.name" value="result"/>
<property name="com.jaspersoft.studio.field.label" value="result"/>
<property name="com.jaspersoft.studio.field.tree.path" value="sampletable"/>
</field>
<field name="count" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.name" value="count"/>
<property name="com.jaspersoft.studio.field.label" value="count"/>
</field>
<group name="Group1" isStartNewColumn="true">
<groupExpression><![CDATA[$F{count}%2 == 0 ? ($V{REPORT_COUNT} <= $F{count}/2) : (($V{REPORT_COUNT} - 1) <= $F{count}/2)]]></groupExpression>
</group>
<columnHeader>
<band height="49" splitType="Stretch">
<staticText>
<reportElement x="29" y="0" width="100" height="30" uuid="2d1cbfb0-be49-4f6e-8cd2-1e641ae6e21b">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="c95f114a-b4bc-439b-aff0-23268822dc5d"/>
</reportElement>
<text><![CDATA[result]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="48" splitType="Stretch">
<textField>
<reportElement x="29" y="10" width="100" height="30" uuid="e9e3c344-22bd-4614-9adf-8bbd7a69bf96">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="c95f114a-b4bc-439b-aff0-23268822dc5d"/>
</reportElement>
<textFieldExpression><![CDATA[$F{result}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
以下是变化-
$F{count}%2==0?($V{REPORT_COUNT}这里是一个示例,说明了如果在数据集中有COUNT,如何执行此操作。还请注意,只有当报表在单个页面中结束时,此操作才有效-
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.15.0.final using JasperReports Library version 6.15.0-dd49bfb94918336b8321d5507193f0169ead4e95 -->
<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="test2" columnCount="2" pageWidth="595" pageHeight="842" columnWidth="277" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="481b7288-0681-43c8-b039-9e95ef42c274">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="SampleDB"/>
<property name="com.jaspersoft.studio.data.sql.tables" value=""/>
<property name="com.jaspersoft.studio.unit." value="pixel"/>
<property name="com.jaspersoft.studio.unit.pageHeight" value="pixel"/>
<property name="com.jaspersoft.studio.unit.pageWidth" value="pixel"/>
<property name="com.jaspersoft.studio.unit.topMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.bottomMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.leftMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.rightMargin" value="pixel"/>
<property name="com.jaspersoft.studio.unit.columnWidth" value="pixel"/>
<property name="com.jaspersoft.studio.unit.columnSpacing" value="pixel"/>
<queryString>
<![CDATA[select result, count
from sampletable]]>
</queryString>
<field name="result" class="java.lang.Long">
<property name="com.jaspersoft.studio.field.name" value="result"/>
<property name="com.jaspersoft.studio.field.label" value="result"/>
<property name="com.jaspersoft.studio.field.tree.path" value="sampletable"/>
</field>
<field name="count" class="java.lang.Integer">
<property name="com.jaspersoft.studio.field.name" value="count"/>
<property name="com.jaspersoft.studio.field.label" value="count"/>
</field>
<group name="Group1" isStartNewColumn="true">
<groupExpression><![CDATA[$F{count}%2 == 0 ? ($V{REPORT_COUNT} <= $F{count}/2) : (($V{REPORT_COUNT} - 1) <= $F{count}/2)]]></groupExpression>
</group>
<columnHeader>
<band height="49" splitType="Stretch">
<staticText>
<reportElement x="29" y="0" width="100" height="30" uuid="2d1cbfb0-be49-4f6e-8cd2-1e641ae6e21b">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="c95f114a-b4bc-439b-aff0-23268822dc5d"/>
</reportElement>
<text><![CDATA[result]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="48" splitType="Stretch">
<textField>
<reportElement x="29" y="10" width="100" height="30" uuid="e9e3c344-22bd-4614-9adf-8bbd7a69bf96">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="c95f114a-b4bc-439b-aff0-23268822dc5d"/>
</reportElement>
<textFieldExpression><![CDATA[$F{result}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
以下是变化-
将计数添加到结果中(在这里,我在查询中使用带有计数的数据库数据集,但您可以执行任何其他操作,只要您可以获得要在报告中使用的总计数)-
现在,编辑报告格式以添加两列,并保持垂直打印顺序-
然后,在报告中使用组表达式创建一个组,作为-$F{count}%2==0($V{report\u count}您能提供一个最小的jrxml来重现这个问题吗?在您想要的输出中,您提到的第4行应该从第二列开始,这意味着前3行应该垂直打印,然后从第二列开始,这应该发生在任意数量的列上?这一假设是,在转到nex之前应该打印3行组t列是否正确?是的,但可能有任意数量的行。超过5行。我知道您希望您的报告最多处理6条记录。但是当记录超过6条时,第7条记录将显示在哪里?在记录结果行5
下的第1列中?当有7条记录时,第一列将为1,2,3,4,第二列为5,6,7。您能支持吗提供一个最小的jrxml来重现这个问题?在您想要的输出中,您提到的第4行应该从第二列开始,这意味着前3行应该垂直打印,然后从第二列开始,这应该发生在任意数量的列上?这一假设是,在转到下一列之前应该打印3行的组是否正确?是的,但可能有任意数量的行。超过5行。我知道您希望报告最多处理6条记录。但是当记录超过6条时,第7条记录将显示在哪里?在记录结果行5
下的第1列中?当有7条记录时,第一列将是1,2,3,4,第二列是5,6,7。不幸的是,我的报告不总是适合一页。所以我自己用两个子报告找到了解决方案。但是感谢您的帮助!不幸的是,我的报告不总是适合一页。所以我自己用两个子报告找到了解决方案。但是感谢您的帮助!