2011-09-30 59 views
0

我在JasperReports中生成子報表時遇到了一些問題。 我有2個報告,我在iReport中做出的。無法從Java代碼生成JasperReports中的子報表

主要報告:

<?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="raporcik" 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"/> 
<parameter name="autor" class="java.lang.String"/> 
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false"> 
    <defaultValueExpression><![CDATA["C:\\Documents and Settings\\user\\workspace\\Jasper\\report\\"]]></defaultValueExpression> 
</parameter> 
<field name="name" class="java.lang.String"/> 
<background> 
    <band splitType="Stretch"/> 
</background> 
<title> 
    <band height="79" splitType="Stretch"> 
     <staticText> 
      <reportElement x="242" y="31" width="115" height="28"/> 
      <textElement> 
       <font size="18"/> 
      </textElement> 
      <text><![CDATA[Something]]></text> 
     </staticText> 
     <textField> 
      <reportElement x="439" y="59" width="100" height="20"/> 
      <textElement/> 
      <textFieldExpression class="java.lang.String"><![CDATA[$P{autor}]]></textFieldExpression> 
     </textField> 
    </band> 
</title> 
<pageHeader> 
    <band height="35" splitType="Stretch"/> 
</pageHeader> 
<detail> 
    <band height="28" splitType="Stretch"/> 
    <band height="50"> 
     <subreport> 
      <reportElement x="46" y="0" width="200" height="50"/> 
      <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression> 
      <subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "info.jasper"]]></subreportExpression> 
     </subreport> 
    </band> 
</detail> 
<summary> 
    <band height="42" splitType="Stretch"/> 
</summary> 

第二次報告(報表):

<?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="info" language="groovy" pageWidth="555" pageHeight="802" columnWidth="555" 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"/> 
<field name="name" class="java.lang.String"/> 
<background> 
    <band splitType="Stretch"/> 
</background> 
<detail> 
    <band height="52" splitType="Stretch"> 
     <textField> 
      <reportElement x="37" y="12" width="100" height="20"/> 
      <textElement/> 
      <textFieldExpression class="java.lang.String"><![CDATA[$F{name}]]></textFieldExpression> 
     </textField> 
    </band> 
</detail> 
</jasperReport> 

和Java代碼:

代碼在Main方法:

JasperDesign jsp = JRXmlLoader.load("C:/Documents and Settings/user/workspace/Jasper/report/raporcik.jrxml");  
    JasperCompileManager.compileReportToFile("C:/Documents and Settings/user/workspace/Jasper/report/info.jrxml");  
    JasperReport jasperReport = JasperCompileManager.compileReport(jsp);   

    Map<String, Object> parametros = new HashMap<String, Object>(); 
    parametros.put("autor", "Jasper W."); 
    parametros.put("SUBREPORT_DIR","C:/Documents and Settings/user/workspace/Jasper/report/"); 
    List lista = new ArrayList(); 
    lista.add(new Name("something1")); 
    lista.add(new Name("something2")); 

    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parametros, new JRBeanCollectionDataSource(lista));  


    JRExporter exporter = new JRPdfExporter(); 
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
    exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new java.io.File("C:/Documents and Settings/user/workspace/Jasper/report/hello.pdf")); 
    exporter.exportReport();  

而且名稱類:

public class Name { 

String name; 

public Name(){ 

} 

public Name(String _name){ 
    this.name = _name;  
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

}

我不知道我做錯了,但我無法生成報表。它總是空的。子報表僅包含靜態文本時,我遇到同樣的問題。

+0

也許這可能有助於http://stackoverflow.com/questions/3067502/subreports-in-jasper-reports – Alfabravo

回答

0

我試了幾天纔得到子報告的工作,即使我完全按照文檔,它沒有工作。

恕我直言「子報告」實際上沒有工作。

0

您的子報表爲空可能是因爲您的子報表或主報表的JRXML中沒有數據源或查詢。你可以在this answer找到更多的信息。它正是你需要使用你的子報表只有靜態字段。

所以你的問題不完全在子報表中,而是以Jasper Reports環境生成報表的方式。