4

我正在开发一个 grails 项目,该项目使用 jasper 插件下载 pdf 和 doc 格式的文档。

我有几个 jasper 子报表,并在动态 jasper 中使用这些子报表来下载 pdf 和 docx 格式的文档。我正在使用动态碧玉报告,因为碧玉子报告的位置可能会有所不同。

我的碧玉子报告有一个标题和一个细节带。

在此处输入图像描述

输出是

在此处输入图像描述

现在我的问题是边界。需要边框,例如:

在此处输入图像描述

我尝试设置矩形、框架但都失败了,因为两个乐队没有共享一个上颚(组件)。

我的要求是通过碧玉报告或通过动态碧玉的边界。我不知道如何设置边界。

编辑................................................. .....................

我还尝试通过动态 jasper 代码使用框架和矩形设置边框,输出为:

在此处输入图像描述

框架和矩形不覆盖整个子报表。这是我的代码:

JRDesignRectangle rectangle = new JRDesignRectangle();
//JRDesignFrame rectangle = new JRDesignFrame();
rectangle.setX(subReport.getX());
rectangle.setY(subReport.getY());
rectangle.setHeight(subReport.getHeight());
rectangle.setWidth(subReport.getWidth());
rectangle.setPositionType(PositionTypeEnum.FLOAT);
band.addElement(rectangle);
4

2 回答 2

3

如果您使用的是 jasper 报告插件,您可以打开 JRXML 文件并说出类似

 <box>
        <topPen lineWidth="1.0"/>
        <leftPen lineWidth="1.0"/>
        <bottomPen lineWidth="1.0"/>
        <rightPen lineWidth="1.0"/>
    </box>

Jasper 报告附带了一位名为“ IReport Designer”的优秀设计师。您可以使用framesIReport 设计器中的概念并将子报表放在框架内,然后在框架本身上应用边框属性。您还可以发现BorderAroundTable很有用。我肯定也会推荐这些链接。

如何为子报表添加边框

围绕两个子报表构建框架

Jasper 报告中的边框

让我们知道此解决方案是否适合您。

如果它适用于具有摘要和页眉的子报表,那么它也可以帮助您解决问题。

编辑和添加有边框的主报表和子报表代码

主报告源代码

<?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="testborder" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <detail>
        <band height="421" splitType="Stretch">
            <subreport>
                <reportElement x="25" y="148" width="200" height="100"/>
                <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.JREmptyDataSource()]]></dataSourceExpression>
                <subreportExpression><![CDATA["C:\\jaspersamples\\testborder_subreport1.jasper"]]></subreportExpression>
            </subreport>
            <frame>
                <reportElement x="45" y="119" width="390" height="176"/>
                <box>
<topPen lineWidth="2.0" lineStyle="Solid"/>
<leftPen lineWidth="2.0" lineStyle="Solid"/>

                    <bottomPen lineWidth="2.0" lineStyle="Solid"/>
                    <rightPen lineWidth="2.0" lineStyle="Solid"/>
                </box>
            </frame>
        </band>
    </detail>
</jasperReport>

子报表源代码

<?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="testborder_subreport1" language="groovy" pageWidth="802" pageHeight="555" orientation="Landscape" whenNoDataType="AllSectionsNoDetail" columnWidth="802" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <pageHeader>
        <band height="29" splitType="Stretch">
            <staticText>
                <reportElement x="317" y="5" width="100" height="20"/>
                <textElement/>
                <text><![CDATA[HELLO TEST]]></text>
            </staticText>
        </band>
    </pageHeader>
    <summary>
        <band height="29" splitType="Stretch">
            <staticText>
                <reportElement x="317" y="0" width="100" height="20"/>
                <textElement/>
                <text><![CDATA[i am testing BORDER]]></text>
            </staticText>
        </band>
    </summary>
</jasperReport>

输出有点像这样

在此处输入图像描述

于 2013-08-12T12:20:01.860 回答
0

您可以使用 IReport 或 Jaspersoft Studio将您的子报表附在一个框架中。Jaspersoft Studio的步骤:

  1. 选择主报告并打开大纲视图
  2. 找到子报表元素并右键单击它。
  3. 选择包含在框架中。
  4. 打开框架元素的属性。
  5. 转到边框选项卡并选择所需的边框选项。
于 2019-03-04T07:33:53.380 回答