【问题标题】:Jasper reports: positioning element on bottom of the pageJasper 报告:页面底部的定位元素
【发布时间】:2015-12-14 19:07:48
【问题描述】:

我想知道是否可以将动态增长的(表格)元素定位到页面底部?我的表格元素位于页面页脚带上方的详细信息带上。

基本上,在我的情况下,表格最顶行的位置将根据表格中的行数一直动态变化。但我不确定 Jasper 是否可以创建这种演示文稿,其中表格基本上从下到上“增长”,表格的最后一行基本上固定在页面底部,就在上面页脚。如果表格最顶行的位置始终是固定的,并且表格会从固定的顶部位置向页面底部“正常增长”,那将没有问题...

我尝试将表格的位置类型属性设置为相对于底部的固定,但之后整个表格完全消失了。到目前为止,这是我能想到的唯一解决问题的方法。

【问题讨论】:

  • 你的桌子在detail band吗?需要在detail band吗? (你有多个表吗?)。解决方案因这里而异...
  • 是的,我的表格(以及表格上方的 2 个文本字段)位于详细信息带上。我在这个页面上只有一张桌子。此详细信息带上方还有另一个包含表格的详细信息带,但它不包含表格,仅包含文本字段。我想我的表格也可以放在其他波段上,但我看不出将它重构到另一个波段将如何帮助我将表格的最后一行固定在页面底部(就在页脚上方)。但也许有一个解决方案....
  • 我发了一个...试试看...

标签: jasper-reports


【解决方案1】:

也许实现这一点的最简单方法是将您的表放在<groupFooter>footerPosition="StackAtBottom"

正确的分组方式取决于您的数据源,但假设您只有一个表创建一个虚拟组。

示例带有页面 StackAtBottom 表格的虚拟组

<?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="Example2" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="ca579c38-1e4f-4993-a020-efcea9d1096e">
<style name="table"><box><pen lineWidth="1.0" lineColor="#000000"/></box></style>
<style name="table_TD" mode="Opaque" backcolor="#FFFFFF"><box><pen lineWidth="0.5" lineColor="#000000"/></box></style>
<subDataset name="Table" uuid="982be61b-ae46-4404-a9a0-30ba13e8c414">
    <queryString language="xPath">
        <![CDATA[/report/table/entry]]>
    </queryString>
    <field name="name" class="java.lang.String">
        <fieldDescription><![CDATA[name]]></fieldDescription>
    </field>
    <field name="class" class="java.lang.String">
        <fieldDescription><![CDATA[class]]></fieldDescription>
    </field>
</subDataset>
<queryString language="xPath">
    <![CDATA[/report]]>
</queryString>
<group name="dummy" footerPosition="StackAtBottom">
    <groupFooter>
        <band height="29">
            <componentElement>
                <reportElement key="table" style="table" x="0" y="0" width="360" height="20" uuid="53ea5a0e-1218-4150-ab5a-5f947e73b284"/>
                <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="Table" uuid="64092841-9993-4ccd-89b4-84a546c719cf">
                        <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("report/table/entry")]]></dataSourceExpression>
                    </datasetRun>
                    <jr:column width="90" uuid="4f5b1813-a9cc-4f83-9bdb-b0d8c4299133">
                        <jr:detailCell style="table_TD" height="20">
                            <textField>
                                <reportElement x="0" y="0" width="90" height="20" uuid="f1a97e19-e23d-40b6-ad95-10614f516db7"/>
                                <textFieldExpression><![CDATA[$F{class}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                    <jr:column width="90" uuid="98cfbe63-f865-419c-ad8f-d8af2ed706ba">
                        <jr:detailCell style="table_TD" height="20">
                            <textField>
                                <reportElement x="0" y="0" width="90" height="20" uuid="0480f047-02ba-4ec4-b12a-ef56a3cbfee9"/>
                                <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
                            </textField>
                        </jr:detailCell>
                    </jr:column>
                </jr:table>
            </componentElement>
        </band>
    </groupFooter>
</group>
<detail>
    <band height="17" splitType="Stretch"/>
</detail>
</jasperReport>

结果

【讨论】:

  • 我尝试了上面的示例,但似乎 jrxml 行与我的乐队不兼容:jasper studio 将这些行指示为错误,如果我尝试保存修改后的 jrxml,它会自动抛出我的添加离开。基本上我只是在我的第二个细节带周围添加了以下几行: 。 . . . . . . 我的数据源是一组 bean。
  • 该组在主报告中的查询字符串之后...在您的所有详细信息带之前...我已经编辑了答案,因此您可以看到组带的位置...
  • 谢谢,我会试试的。只是出于好奇,jasper 将如何理解将完全定义在实际细节带之外的组定位在正确的细节带中,因为我有许多(两个)这些细节带。从上面的代码中,我看不到顶部的组定义和正确的细节带之间的链接......
  • 您也可以在工作室中创建,右键单击您的报告节点,选择添加组.. 虚拟组是由 groupExpression 中没有任何内容(它在报告中执行一次),每个组可以有一个 groupHeader和 groupFooter(在这种情况下删除 groupHeader),并选择 groupFooter 到 stackAtBottom
  • 这个虚拟组将在您的详细信息带之后执行,如果您在此之后需要详细信息(您需要循环其他记录),您需要开始使用子报表。如果您只有另一个表格,请考虑使用汇总带...基本上所有不同的带您都尝试在正确的带中报告内容...以实现您想要的布局...就我个人而言,我讨厌表格组件,我总是使用子报告..; )
猜你喜欢
  • 2012-01-23
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多