2010-06-18 210 views
2

我有兩張表格可以在同一頁面上打印。這些表格的數據將通過自定義數據源的地圖提供。我需要實施它。我用Google來執行這項任務。賈斯珀報告中的子報告

那時我遇到了分報告的概念,但是我沒有得到關於如何實現分報告的很多信息。

我對如何創建子報告有一個想法。但我不知道如何用customdatasource填充子報表。這是我的問題。請幫助我實現這一點。

注意:我試圖實現子報表,但出現錯誤。下面是我用於編譯子報表代碼:

JasperPrint print = new JasperPrint(); 
JRPdfExporter exporter = new JRPdfExporter(); 
JasperDesign design, design1; 
JasperReport report, report1; 
JasperReport jasperReport; 
JasperDesign jd1; 

jd1 = JRXmlLoader.load("D:\\sub_report1.jrxml"); 
jasperReport = JasperCompileManager.compileReport(jd1); 
Map parameters = new HashMap(); 
parameters.put("ReportTitle", "Table Report"); 
parameters.put("DataFile", "TableSource.java"); 
parameters.put("Subreport_1", jasperReport); 

design = JRXmlLoader.load("D:\\sub_report2.jrxml"); 
report = JasperCompileManager.compileReport(design); 
parameters.put("Subreport_2", report); 

design1 = JRXmlLoader.load("D:\\master_report.jrxml"); 
report1 = JasperCompileManager.compileReport(design1); 
JasperFillManager.fillReportToFile(report1, "D:\\master_report.jrprint", parameters, new TableDataSource()); 

exporter.setParameter(JRExporterParameter.JASPER_PRINT, print); 
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "D:K\\Report.pdf"); 
exporter.exportReport(); 

JasperViewer.viewReport(print); 

在這裏,我單獨編譯subreport1 & subreport2並添加它們作爲地圖的參數。然後,我通過masterreports填充時發生錯誤。請幫我編寫報告。編譯器錯誤的

堆棧跟蹤:

Exception in thread "main" net.sf.jasperreports.engine.JRRuntimeException: Unkown print order 0. at net.sf.jasperreports.engine.fill.JRFillSubreport.initSubreportFiller(Unknown Source) at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluateSubreport(Unknown Source) at net.sf.jasperreports.engine.fill.JRFillSubreport.evaluate(Unknown Source) at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(Unknown Source) at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(Unknown Source) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(Unknown Source) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(Unknown Source) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(Unknown Source) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(Unknown Source) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(Unknown Source) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(Unknown Source) at net.sf.jasperreports.engine.fill.JRFiller.fillReport(Unknown Source) at net.sf.jasperreports.engine.JasperFillManager.fillReport(Unknown Source) at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(Unknown Source) at ReportTableCompiler.main(ReportTableCompiler.java:53)

+0

支付Jasper報表的所有教程。所以你可能無法獲得免費的好資源。您可能需要在Google中查詢一些幫助。這裏的問題應該是具體的。 – 2010-06-18 06:10:55

+0

這是不正確的。 JaspertReports是開源的,有很多免費的教程。 – Bozho 2010-06-18 06:41:14

+0

@Purushotham:我修改了我的問題,現在你能理解了嗎 – Karthikeyan 2010-06-18 07:17:10

回答

0

我張貼了類似的問題的答案。你可以在這裏查看答案。

Using iReport with eclipse to generate reports approperly

+0

你已經指定了填寫單個報表的代碼。但我的問題是如何處理多個報告。即子報表? – Karthikeyan 2010-06-18 07:25:17

+0

子報表與實際報表沒有區別。您必須在生成報告之前編譯子報告。因此,您可以使用相同的代碼庫來填充其他報表(子報表)。 – 2010-06-18 07:29:22

+0

順便說一句,代碼不會告訴你如何使用自定義數據源。我爲那些有疑問填充報告的人提供了該代碼。 – 2010-06-18 07:30:21

0

子報告,就像任何其他正常的報告。他們擁有自己的JRXML文件並使用自己的數據源。您可以使用子報表工具單獨或在主報表中調用子報表。在這種情況下,數據源在主JRXML,子報表屬性對話框,子報表選項卡中指定,它與主報表數據源不同。

我不完全明白你想做什麼,但你也可以提供參數給子報告,所以它根據主表中的當前行過濾它的數據。

+0

@m_pGladiato:我修改了我的問題請幫我解決這個問題 – Karthikeyan 2010-06-22 09:32:19

1

如果你只有一個細節帶和你的subreportExpression是像「SUBREPORT_1.jasper」你可以用它來編譯幾個子報表

JRDesignBand jrBand = (JRDesignBand) jasperDesign.getDetailSection().getBands()[0]; 
    JRElement[] jrElements = jrBand.getElements(); 
    for (JRElement jrElement : jrElements) { 
     if (jrElement instanceof JRDesignSubreport) { 
     JRDesignSubreport subReportDesign = (JRDesignSubreport) jrElement; 
     JRExpression jrExpression = subReportDesign.getExpression(); 
     String file = jrExpression.getText(); 
     file = file.substring(1, file.length()-8)+".jrxml"; 
     JasperCompileManager.compileReport(file); 
     } 
    }