我正在研究 grails 并使用 jasper 报告生成 pdf,docx 。我正在使用 ireport 来制作它。我在主报告中制作了许多子报告。我的要求是动态交换子报告。这是我的三个子报告。
<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');
}
}
现在我想在我的 pdf 中以任何顺序交换这 3 个子报告。我不知道该怎么做。
我还有一个问题。我有一个域类。该类中有一些字段。用于演示
class Demo{
String field1
String field2
String field3
}
我正在 ireport 中发送此类的一个实例。
Demo demo = Demo.findbyid(1)
那么如何获取所有字段的值,字段 1、字段 2 和字段 3。我知道的一种方法是我可以一张一张地发送地图。喜欢
result.data= [field1:demo.field1,field2:demo.field2]
我可以在 ireport 上获得值来定义同名字段。有什么想法可以从它的实例中获得价值。