2010-06-18 6 views
2

J'ai deux tableaux à imprimer sur la même page. Les données pour ces tables seront fournies à partir d'une carte à partir d'une source de données personnalisée. Je dois l'implémenter. J'ai googlé pour l'implémentation de cette tâche.Sous-rapports dans Jasper Rapports

A ce moment-là, je suis tombé sur un concept de sous-rapports, mais je n'ai pas beaucoup d'informations sur la façon de mettre en œuvre des sous-rapports.

J'ai une idée de la façon de créer des sous-rapports. Mais je ne sais pas comment remplir les sous-rapports avec customdatasource. C'est ma question. Aidez-moi s'il vous plaît à réaliser ceci.

Remarque: J'ai essayé d'implémenter des sous-rapports, mais j'obtiens une erreur. Voici le code j'ai utilisé pour la compilation subreports:

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); 

Ici, j'ai compilé subreport1 & subreport2 individuellement et les ajoutée comme paramètre sur la carte. Ensuite, je reçois une erreur lors du remplissage de masterreports. Aidez-moi s'il vous plaît à compiler le rapport.

trace de la pile de l'erreur du compilateur:

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

Tous les tutoriels de Jasper Reports sont payés. Donc, vous pourriez ne pas obtenir de bonnes ressources gratuitement. Vous devrez peut-être vérifier dans google pour de l'aide. Ici, la question devrait être spécifique. –

+0

ce n'est pas vrai. JaspertReports, étant open source, a un certain nombre de tutoriels gratuits. – Bozho

+0

@Purushotham: J'ai modifié ma question, pouvez-vous comprendre maintenant – Karthikeyan

Répondre

0

Je posté la réponse à la question similaire. Vous pouvez vérifier la réponse ici.

Using iReport with eclipse to generate reports approperly

+0

Vous avez spécifié le code pour remplir un seul rapport. mais ma question est de savoir comment gérer plusieurs rapports. c'est-à-dire des sous-rapports? – Karthikeyan

+0

Le sous-rapport n'est pas différent du rapport réel. Vous devez compiler le sous-rapport avant de générer le rapport. Vous pouvez donc utiliser la même base de code pour remplir d'autres rapports (sous-rapports). –

+0

BTW ce code ne vous dit pas comment utiliser la source de données personnalisée. J'ai donné ce code à ceux qui ont des requêtes pour remplir les rapports. –

0

rapports de sous sont comme tous les autres rapports normaux. Ils ont leur propre fichier JRXML et utilisent leurs propres sources de données. Vous pouvez appeler le sous-rapport seul ou dans un rapport principal à l'aide de l'outil de sous-rapport. La source de données dans ce cas est spécifiée dans le masque JRXML maître, dans la boîte de dialogue des propriétés du sous-rapport, dans l'onglet Sous-état, et elle est différente de la source de données du rapport du maître.

Je ne comprends pas complètement ce que vous essayez de faire, mais vous pouvez également fournir des paramètres au sous-rapport, afin qu'il filtre ses données en fonction de la ligne actuelle de la table principale.

+0

@m_pGladiato: j'ai modifié ma question pls m'aider à résoudre ce problème – Karthikeyan

1

Si vous avez une seule bande de détail et votre subreportExpression est quelque chose comme « SUBREPORT_1.jasper », vous pouvez l'utiliser pour compiler plusieurs sous-rapports

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); 
     } 
    } 
Questions connexes