1

私は grails に取り組んでおり、jasper レポートを使用して pdf,docx を生成しています。ireport を使用して作成しています。メイン レポート内に多数のサブ レポートを作成しています。私の要件は、サブレポートを動的に交換することです。これが私の3つのサブレポートです。

<subreport>
            <reportElement positionType="Float" x="0" y="91" width="200" height="24"/>
            <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listOfInstance})]]></dataSourceExpression>
            <subreportExpression class="java.lang.String"><![CDATA["/home/jft/workspace/CvSurgeon/CvSurgeon/report/showInterest.jasper"]]></subreportExpression>
        </subreport>
        <subreport>
            <reportElement positionType="Float" x="0" y="115" width="200" height="27"/>
            <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listOfInstance})]]></dataSourceExpression>
            <subreportExpression class="java.lang.String"><![CDATA["/home/jft/workspace/CvSurgeon/CvSurgeon/report/showWorkExperience.jasper"]]></subreportExpression>
        </subreport>
        <subreport>
            <reportElement positionType="Float" x="0" y="142" width="200" height="31"/>
            <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listOfInstance})]]></dataSourceExpression>
            <subreportExpression class="java.lang.String"><![CDATA["/home/jft/workspace/CvSurgeon/CvSurgeon/report/showEducation.jasper"]]></subreportExpression>
        </subreport>

私のコントローラーコードコードはここにあり、ジャスパーレポートをpdf形式に生成するのに役立ちます。

def testTemplateFileForDownload = {
    def result = [:]
    result.data = []

    result.data << [key1:value1,key2:value2]
    params._format = "PDF"
    params._file = "tamplate9" // set your file name this will call to sample.jrxml
    def report = jasperService.buildReportDefinition(params, request.getLocale(), result)
    generateReport(report)
}

def generateReport = { reportDef ->
        if (!reportDef.fileFormat.inline && !reportDef.parameters._inline) {

            response.setHeader("Content-Disposition", "inline; filename=\"${reportDef.parameters._name ?: reportDef.name}.${reportDef.fileFormat.extension}\"");
            response.setHeader("Content-Type", "${reportDef.fileFormat.mimeTyp}");
            response.contentType = reportDef.fileFormat.mimeTyp
            response.characterEncoding = "UTF-8"
            response.outputStream << reportDef.contentStream.toByteArray()
        } else {
            render(text: reportDef.contentStream, contentType: reportDef.fileFormat.mimeTyp, encoding: reportDef.parameters.encoding ? reportDef.parameters.encoding : 'UTF-8');
        }
}

ここで、これら 3 つのサブレポートを PDF 内の任意の順序で交換したいと考えています。これを行う方法がわかりません。

また、もう 1 つ質問があります。私はドメインクラスを持っています。そのクラスにはいくつかのフィールドがあります。デモ用

class Demo{
String field1
String field2
String field3
}

このクラスのインスタンスを ireport で送信しています。

Demo demo = Demo.findbyid(1)

次に、field1、field2、および field3 のすべてのフィールドの値を取得するにはどうすればよいですか。1 つの方法で、マップを 1 つずつ送信できることを知っています。お気に入り

result.data= [field1:demo.field1,field2:demo.field2]

そして、ireport で値を取得して、同じ名前のフィールドを定義できます。そのインスタンスからどのように価値を得ることができるかという考えはありますか?

4

1 に答える 1

1

パラメータを使用してレポート名(またはパス全体)を渡すことができますsubreportExpressionは最初の質問に役立ちます。 メインレポートデータにあるものがある場合、 dataSourceExpressionで行ったのと同じように、これはパラメーターの代わりにフィールドを使用しています。

    <subreport>
        <reportElement positionType="Float" x="0" y="91" width="200" height="24"/>
        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listOfInstance})]]></dataSourceExpression>
        <subreportExpression class="java.lang.String"><![CDATA["/home/jft/workspace/CvSurgeon/CvSurgeon/report/"+$P{Report1}]]></subreportExpression>
    </subreport>
    <subreport>
        <reportElement positionType="Float" x="0" y="115" width="200" height="27"/>
        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listOfInstance})]]></dataSourceExpression>
        <subreportExpression class="java.lang.String"><![CDATA["/home/jft/workspace/CvSurgeon/CvSurgeon/report/"+$P{Report2}]]></subreportExpression>
    </subreport>
    <subreport>
        <reportElement positionType="Float" x="0" y="142" width="200" height="31"/>
        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listOfInstance})]]></dataSourceExpression>
        <subreportExpression class="java.lang.String"><![CDATA["/home/jft/workspace/CvSurgeon/CvSurgeon/report/"+$P{Report3}]]></subreportExpression>
    </subreport>
于 2013-06-26T17:50:10.680 に答える