prash194 Posted April 9, 2007 Share Posted April 9, 2007 Hello all, I am new to Jasper Report and right now i am working on it for my project. Whatever i have done so far is first i create jrxml file compile it and use it to generate the report in different formats. Actually i have to know in advance the number and types of data that the report should show.But this is not my requirement as i have to make the reporting module that doesnot know in advance the datasource and its contents including the number of fields it holds. So is there any way that i can use jasper to create report dynamically so that i dont have to make template file in advance. Link to comment Share on other sites More sharing options...
csplrj Posted April 11, 2007 Share Posted April 11, 2007 Yes You can definitely create it Open the jrxml file in notepad or any XML editor as it is a simple XML file. You can compile the Jasper through JasperReport APIs Bye for now CSJakharia Link to comment Share on other sites More sharing options...
chandrakanth.tsgmail.com Posted April 16, 2007 Share Posted April 16, 2007 I have the same question. I need to generate report where in the number of fields and their types are not known in advance. Can it be done using jasper reports.Is there any utility classes we can use to get this task done ? Hey ... prash194 ... if you find the solution please let me know. I thought of writing a utility class to generate jrxml file dynamically with some predefined format. That can be done but I don't think it is the ideal way. cheers Link to comment Share on other sites More sharing options...
Juriy Posted April 16, 2007 Share Posted April 16, 2007 I guess you should generate your jrxml file on the fly, rather then using static jrxml.Here is my point on how to accomplish your task: 1. Explore your datasource on the fly (get the column count, column data types).2. Having all the data you need from [1] - generate .jrxml file. Use any XML building API. For example you may use JDOM.3. Pass generated XML as an InputStream to JasperCompileManager.compileReport(...);4. Fill report, show it to user or do anything you want. Link to comment Share on other sites More sharing options...
xVik Posted April 16, 2007 Share Posted April 16, 2007 it can be simplier if u use jasper api to buil report design.. this code i found somewhere on thi sorumCode:/** ============================================================================* The JasperReports License, Version 1.0* ============================================================================* * Copyright (C) 2001-2004 Teodor Danciu (teodord@users.sourceforge.net). All rights reserved.* * Redistribution and use in source and binary forms, with or without modification,* are permitted provided that the following conditions are met:* * 1. Redistributions of source code must retain the above copyright notice,* this list of conditions and the following disclaimer.* * 2. Redistributions in binary form must reproduce the above copyright notice,* this list of conditions and the following disclaimer in the documentation* and/or other materials provided with the distribution.* * 3. The end-user documentation included with the redistribution, if any, must* include the following acknowledgment: "This product includes software* developed by Teodor Danciu (http://jasperreports.sourceforge.net)."* Alternately, this acknowledgment may appear in the software itself, if* and wherever such third-party acknowledgments normally appear.* * 4. The name "JasperReports" must not be used to endorse or promote products * derived from this software without prior written permission. For written * permission, please contact teodord@users.sourceforge.net.* * 5. Products derived from this software may not be called "JasperReports", nor * may "JasperReports" appear in their name, without prior written permission* of Teodor Danciu.* * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*//** ============================================================================* GNU Lesser General Public License* ============================================================================** JasperReports - Free Java report-generating library.* Copyright (C) 2001-2004 Teodor Danciu teodord@users.sourceforge.net* * This library is free software; you can redistribute it and/or* modify it under the terms of the GNU Lesser General Public* License as published by the Free Software Foundation; either* version 2.1 of the License, or (at your option) any later version.* * This library is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU* Lesser General Public License for more details.* * You should have received a copy of the GNU Lesser General Public* License along with this library; if not, write to the Free Software* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.* * Teodor Danciu* 173, Calea Calarasilor, Bl. 42, Sc. 1, Ap. 18* Postal code 030615, Sector 3* Bucharest, ROMANIA* Email: teodord@users.sourceforge.net*/import dori.jasper.engine.*;import dori.jasper.engine.data.*;import dori.jasper.engine.design.*;import dori.jasper.engine.export.*;import dori.jasper.engine.util.*;import dori.jasper.view.*;import java.sql.*;import java.awt.*;import java.util.*;import java.io.*;/****/public class NoXmlDesignApp{ /** * */ private static final String TASK_COMPILE = "compile"; private static final String TASK_FILL = "fill"; private static final String TASK_PRINT = "print"; private static final String TASK_PDF = "pdf"; private static final String TASK_XML = "xml"; private static final String TASK_XML_EMBED = "xmlEmbed"; private static final String TASK_HTML = "html"; private static final String TASK_XLS = "xls"; private static final String TASK_CSV = "csv"; private static final String TASK_RUN = "run"; private static final String TASK_WRITE_XML = "writeXml"; /** * */ public static void main(String[] args) { String fileName = null; String taskName = null; if(args.length == 0) { usage(); return; } int k = 0; while ( args.length > k ) { if ( args[k].startsWith("-T"«») ) taskName = args[k].substring(2); if ( args[k].startsWith("-F"«») ) fileName = args[k].substring(2); k++; } try { long start = System.currentTimeMillis(); if (TASK_COMPILE.equals(taskName)) { JasperDesign jasperDesign = getJasperDesign(); JasperCompileManager.compileReportToFile(jasperDesign, fileName); System.err.println("Compile time : " + (System.currentTimeMillis() - start)); System.exit(0); } else if (TASK_FILL.equals(taskName)) { //Preparing parameters Map parameters = new HashMap(); parameters.put("ReportTitle", "Address Report"«»); parameters.put("OrderByClause", "ORDER BY City"«»); JasperFillManager.fillReportToFile(fileName, parameters, getConnection()); System.err.println("Filling time : " + (System.currentTimeMillis() - start)); System.exit(0); } else if (TASK_PRINT.equals(taskName)) { JasperPrintManager.printReport(fileName, true); System.err.println("Printing time : " + (System.currentTimeMillis() - start)); System.exit(0); } else if (TASK_PDF.equals(taskName)) { JasperExportManager.exportReportToPdfFile(fileName); System.err.println("PDF creation time : " + (System.currentTimeMillis() - start)); System.exit(0); } else if (TASK_XML.equals(taskName)) { JasperExportManager.exportReportToXmlFile(fileName, false); System.err.println("XML creation time : " + (System.currentTimeMillis() - start)); System.exit(0); } else if (TASK_XML_EMBED.equals(taskName)) { JasperExportManager.exportReportToXmlFile(fileName, true); System.err.println("XML creation time : " + (System.currentTimeMillis() - start)); System.exit(0); } else if (TASK_HTML.equals(taskName)) { JasperExportManager.exportReportToHtmlFile(fileName); System.err.println("HTML creation time : " + (System.currentTimeMillis() - start)); System.exit(0); } else if (TASK_XLS.equals(taskName)) { File sourceFile = new File(fileName); JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile); File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".xls"«»); JRXlsExporter exporter = new JRXlsExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString()); exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); exporter.exportReport(); System.err.println("XLS creation time : " + (System.currentTimeMillis() - start)); System.exit(0); } else if (TASK_CSV.equals(taskName)) { File sourceFile = new File(fileName); JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile); File destFile = new File(sourceFile.getParent(), jasperPrint.getName() + ".csv"«»); JRCsvExporter exporter = new JRCsvExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFile.toString()); exporter.exportReport(); System.err.println("CSV creation time : " + (System.currentTimeMillis() - start)); System.exit(0); } else if (TASK_RUN.equals(taskName)) { //Preparing parameters Map parameters = new HashMap(); parameters.put("ReportTitle", "Address Report"«»); parameters.put("OrderByClause", "ORDER BY City"«»); JasperRunManager.runReportToPdfFile(fileName, parameters, getConnection()); System.err.println("PDF running time : " + (System.currentTimeMillis() - start)); System.exit(0); } else if (TASK_WRITE_XML.equals(taskName)) { JasperCompileManager.writeReportToXmlFile(fileName); System.err.println("XML design creation time : " + (System.currentTimeMillis() - start)); System.exit(0); } else { usage(); System.exit(0); } } catch (JRException e) { e.printStackTrace(); System.exit(1); } catch (Exception e) { e.printStackTrace(); System.exit(1); } } /** * */ private static void usage() { System.out.println( "NoXmlDesignApp usage:" ); System.out.println( "tjava NoXmlDesignApp -Ttask -Ffile" ); System.out.println( "tTasks : compile | fill | print | pdf | xml | xmlEmbed | html | xls | csv | run | writeXml" ); } /** * */ private static Connection getConnection() throws ClassNotFoundException, SQLException { //Change these settings according to your local configuration String driver = "org.hsqldb.jdbcDriver"; String connectString = "jdbc:hsqldb:hsql://localhost"; String user = "sa"; String password = ""; Class.forName(driver); Connection conn = DriverManager.getConnection(connectString, user, password); return conn; } /** * */ private static JasperDesign getJasperDesign() throws JRException { //JasperDesign JasperDesign jasperDesign = new JasperDesign(); jasperDesign.setName("NoXmlDesignReport"«»); jasperDesign.setPageWidth(595); jasperDesign.setPageHeight(842); jasperDesign.setColumnWidth(515); jasperDesign.setColumnSpacing(0); jasperDesign.setLeftMargin(40); jasperDesign.setRightMargin(40); jasperDesign.setTopMargin(50); jasperDesign.setBottomMargin(50); //Fonts JRDesignReportFont normalFont = new JRDesignReportFont(); normalFont.setName("Arial_Normal"«»); normalFont.setDefault(true); normalFont.setFontName("Arial"«»); normalFont.setSize(12); normalFont.setPdfFontName("Helvetica"«»); normalFont.setPdfEncoding("Cp1252"«»); normalFont.setPdfEmbedded(false); jasperDesign.addFont(normalFont); JRDesignReportFont boldFont = new JRDesignReportFont(); boldFont.setName("Arial_Bold"«»); boldFont.setDefault(false); boldFont.setFontName("Arial"«»); boldFont.setSize(12); boldFont.setBold(true); boldFont.setPdfFontName("Helvetica-Bold"«»); boldFont.setPdfEncoding("Cp1252"«»); boldFont.setPdfEmbedded(false); jasperDesign.addFont(boldFont); JRDesignReportFont italicFont = new JRDesignReportFont(); italicFont.setName("Arial_Italic"«»); italicFont.setDefault(false); italicFont.setFontName("Arial"«»); italicFont.setSize(12); italicFont.setItalic(true); italicFont.setPdfFontName("Helvetica-Oblique"«»); italicFont.setPdfEncoding("Cp1252"«»); italicFont.setPdfEmbedded(false); jasperDesign.addFont(italicFont); //Parameters JRDesignParameter parameter = new JRDesignParameter(); parameter.setName("ReportTitle"«»); parameter.setValueClass(java.lang.String.class); jasperDesign.addParameter(parameter); parameter = new JRDesignParameter(); parameter.setName("OrderByClause"«»); parameter.setValueClass(java.lang.String.class); jasperDesign.addParameter(parameter); //Query JRDesignQuery query = new JRDesignQuery(); query.setText("SELECT * FROM Address $P!{OrderByClause}"«»); jasperDesign.setQuery(query); //Fields JRDesignField field = new JRDesignField(); field.setName("Id"«»); field.setValueClass(java.lang.Integer.class); jasperDesign.addField(field); field = new JRDesignField(); field.setName("FirstName"«»); field.setValueClass(java.lang.String.class); jasperDesign.addField(field); field = new JRDesignField(); field.setName("LastName"«»); field.setValueClass(java.lang.String.class); jasperDesign.addField(field); field = new JRDesignField(); field.setName("Street"«»); field.setValueClass(java.lang.String.class); jasperDesign.addField(field); field = new JRDesignField(); field.setName("City"«»); field.setValueClass(java.lang.String.class); jasperDesign.addField(field); //Variables JRDesignVariable variable = new JRDesignVariable(); variable.setName("CityNumber"«»); variable.setValueClass(java.lang.Integer.class); variable.setResetType(JRVariable.RESET_TYPE_GROUP); JRDesignGroup group = new JRDesignGroup(); group.setName("CityGroup"«»); variable.setResetGroup(group); variable.setCalculation(JRVariable.CALCULATION_SYSTEM); JRDesignExpression expression = new JRDesignExpression(); expression.setValueClass(java.lang.Integer.class); expression.setText("($V{CityNumber} != null)?(new Integer($V{CityNumber}.intValue() + 1)):«»(new Integer(1))"«»); variable.setInitialValueExpression(expression); jasperDesign.addVariable(variable); variable = new JRDesignVariable(); variable.setName("AllCities"«»); variable.setValueClass(java.lang.String.class); variable.setResetType(JRVariable.RESET_TYPE_REPORT); variable.setCalculation(JRVariable.CALCULATION_SYSTEM); jasperDesign.addVariable(variable); //Groups group.setMinHeightToStartNewPage(60); expression = new JRDesignExpression(); expression.setValueClass(java.lang.String.class); expression.setText("$F{City}"«»); group.setExpression(expression); JRDesignBand band = new JRDesignBand(); band.setHeight(20); JRDesignRectangle rectangle = new JRDesignRectangle(); rectangle.setX(0); rectangle.setY(4); rectangle.setWidth(515); rectangle.setHeight(15); rectangle.setForecolor(new Color(0xC0, 0xC0, 0xC0)); rectangle.setBackcolor(new Color(0xC0, 0xC0, 0xC0)); rectangle.setStretchType(JRGraphicElement.STRETCH_TYPE_NO_STRETCH); band.addElement(rectangle); JRDesignTextField textField = new JRDesignTextField(); textField.setX(0); textField.setY(4); textField.setWidth(515); textField.setHeight(15); textField.setBackcolor(new Color(0xC0, 0xC0, 0xC0)); textField.setMode(JRElement.MODE_OPAQUE); textField.setTextAlignment(JRTextElement.TEXT_ALIGN_LEFT); textField.setFont(boldFont); expression = new JRDesignExpression(); expression.setValueClass(java.lang.String.class); expression.setText("" " + String.valueOf($V{CityNumber}) + ". " + String.valueOf($F{City})"«»); textField.setExpression(expression); band.addElement(textField); JRDesignLine line = new JRDesignLine(); line.setX(0); line.setY(19); line.setWidth(515); line.setHeight(0); band.addElement(line); group.setGroupHeader(band); band = new JRDesignBand(); band.setHeight(20); line = new JRDesignLine(); line.setX(0); line.setY(-1); line.setWidth(515); line.setHeight(0); band.addElement(line); JRDesignStaticText staticText = new JRDesignStaticText(); staticText.setX(400); staticText.setY(0); staticText.setWidth(60); staticText.setHeight(15); staticText.setTextAlignment(JRTextElement.TEXT_ALIGN_RIGHT); staticText.setFont(boldFont); staticText.setText("Count : "«»); band.addElement(staticText); textField = new JRDesignTextField(); textField.setX(460); textField.setY(0); textField.setWidth(30); textField.setHeight(15); textField.setTextAlignment(JRTextElement.TEXT_ALIGN_RIGHT); textField.setFont(boldFont); expression = new JRDesignExpression(); expression.setValueClass(java.lang.Integer.class); expression.setText("$V{CityGroup_COUNT}"«»); textField.setExpression(expression); band.addElement(textField); group.setGroupFooter(band); jasperDesign.addGroup(group); //Title band = new JRDesignBand(); band.setHeight(50); line = new JRDesignLine(); line.setX(0); line.setY(0); line.setWidth(515); line.setHeight(0); band.addElement(line); textField = new JRDesignTextField(); textField.setBlankWhenNull(true); textField.setX(0); textField.setY(10); textField.setWidth(515); textField.setHeight(30); textField.setTextAlignment(JRTextElement.TEXT_ALIGN_CENTER); JRDesignReportFont bigFont = new JRDesignReportFont(); bigFont.setName("Arial_Normal"«»); bigFont.setDefault(true); bigFont.setFontName("Arial"«»); bigFont.setSize(22); bigFont.setPdfFontName("Helvetica"«»); bigFont.setPdfEncoding("Cp1252"«»); bigFont.setPdfEmbedded(false); textField.setFont(bigFont); expression = new JRDesignExpression(); expression.setValueClass(java.lang.String.class); expression.setText("$P{ReportTitle}"«»); textField.setExpression(expression); band.addElement(textField); jasperDesign.setTitle(band); //Page header band = new JRDesignBand(); band.setHeight(20); rectangle = new JRDesignRectangle(); rectangle.setX(0); rectangle.setY(5); rectangle.setWidth(515); rectangle.setHeight(15); rectangle.setForecolor(new Color(0x33, 0x33, 0x33)); rectangle.setBackcolor(new Color(0x33, 0x33, 0x33)); band.addElement(rectangle); staticText = new JRDesignStaticText(); staticText.setX(0); staticText.setY(5); staticText.setWidth(55); staticText.setHeight(15); staticText.setForecolor(Color.white); staticText.setBackcolor(new Color(0x33, 0x33, 0x33)); staticText.setMode(JRElement.MODE_OPAQUE); staticText.setTextAlignment(JRTextElement.TEXT_ALIGN_CENTER); staticText.setFont(boldFont); staticText.setText("ID"«»); band.addElement(staticText); staticText = new JRDesignStaticText(); staticText.setX(55); staticText.setY(5); staticText.setWidth(205); staticText.setHeight(15); staticText.setForecolor(Color.white); staticText.setBackcolor(new Color(0x33, 0x33, 0x33)); staticText.setMode(JRElement.MODE_OPAQUE); staticText.setFont(boldFont); staticText.setText("Name"«»); band.addElement(staticText); staticText = new JRDesignStaticText(); staticText.setX(260); staticText.setY(5); staticText.setWidth(255); staticText.setHeight(15); staticText.setForecolor(Color.white); staticText.setBackcolor(new Color(0x33, 0x33, 0x33)); staticText.setMode(JRElement.MODE_OPAQUE); staticText.setFont(boldFont); staticText.setText("Street"«»); band.addElement(staticText); jasperDesign.setPageHeader(band); //Column header band = new JRDesignBand(); jasperDesign.setColumnHeader(band); //Detail band = new JRDesignBand(); band.setHeight(20); textField = new JRDesignTextField(); textField.setX(0); textField.setY(4); textField.setWidth(50); textField.setHeight(15); textField.setTextAlignment(JRTextElement.TEXT_ALIGN_RIGHT); textField.setFont(normalFont); expression = new JRDesignExpression(); expression.setValueClass(java.lang.Integer.class); expression.setText("$F{Id}"«»); textField.setExpression(expression); band.addElement(textField); textField = new JRDesignTextField(); textField.setStretchWithOverflow(true); textField.setX(55); textField.setY(4); textField.setWidth(200); textField.setHeight(15); textField.setPositionType(JRElement.POSITION_TYPE_FLOAT); textField.setFont(normalFont); expression = new JRDesignExpression(); expression.setValueClass(java.lang.String.class); expression.setText("$F{FirstName} + " " + $F{LastName}"«»); textField.setExpression(expression); band.addElement(textField); textField = new JRDesignTextField(); textField.setStretchWithOverflow(true); textField.setX(260); textField.setY(4); textField.setWidth(255); textField.setHeight(15); textField.setPositionType(JRElement.POSITION_TYPE_FLOAT); textField.setFont(normalFont); expression = new JRDesignExpression(); expression.setValueClass(java.lang.String.class); expression.setText("$F{Street}"«»); textField.setExpression(expression); band.addElement(textField); line = new JRDesignLine(); line.setX(0); line.setY(19); line.setWidth(515); line.setHeight(0); line.setForecolor(new Color(0x80, 0x80, 0x80)); line.setPositionType(JRElement.POSITION_TYPE_FLOAT); band.addElement(line); jasperDesign.setDetail(band); //Column footer band = new JRDesignBand(); jasperDesign.setColumnFooter(band); //Page footer band = new JRDesignBand(); jasperDesign.setPageFooter(band); //Summary band = new JRDesignBand(); jasperDesign.setSummary(band); return jasperDesign; } } Link to comment Share on other sites More sharing options...
Teodor Danciu Posted April 17, 2007 Share Posted April 17, 2007 Hi, Just to be more accurate, this is the /demo/samples/noxmldesign sample that can be found in any JasperReports source code distribution package. I hope this helps.Teodor Link to comment Share on other sites More sharing options...
chandrakanth.tsgmail.com Posted April 18, 2007 Share Posted April 18, 2007 Thats the solution I was looking for. I'll try out. And that does not include dynamic chart report. Let me explore. Anyways .... Thanks to xVik & teodord. Link to comment Share on other sites More sharing options...
prash194 Posted April 19, 2007 Author Share Posted April 19, 2007 I found another technique of dynamically manipulating the jrxml file using Java-based template engine "Velocity".The following link can clarify the technique:http://www-128.ibm.com/developerworks/websphere/library/techarticles/0505_olivieri/0505_olivieri.htmlPost edited by: prash194, at: 2007/04/19 10:28 Link to comment Share on other sites More sharing options...
nemanzini Posted August 13, 2007 Share Posted August 13, 2007 Hi guys, I'm new at java and jasper. I have created reports using JasperReports and iReport but have to make my reports more dynamic. Users should be able to select columns that should appear on report.I have tried going thru the article- http://www.ibm.com/developerworks/websphere/library/techarticles/0505_olivieri/0505_olivieri.htmlbut have an error that reads - identify expected at this line :- BufferedWriter writer = new BufferedWriter(new, OutputStreamWriter(outStream));here is the complete code:import org.apache.velocity.Template;import org.apache.velocity.app.Velocity;import org.apache.velocity.context.Context;import org.apache.velocity.exception.ParseErrorException;import org.apache.velocity.exception.ResourceNotFoundException;import org.apache.velocity.servlet.VelocityServlet; import java.io.BufferedWriter;import java.io.PipedInputStream;import java.io.PipedOutputStream; import javax.servlet.ServletConfig;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.util.Properties; public class VelocityTest extends VelocityServlet { protected Properties loadConfiguration(ServletConfig config) { Properties properties = new Properties(); properties.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, config.getServletContext().getRealPath("/")); return properties; } public Template handleRequest(HttpServletRequest request, HttpServletResponse response, Context context) { context.put("sql","SELECT * from wcs.tblpayments"); String fieldList[] = {"PAYMENT_NO","WCS_NUMBER","CONTRACT_NO","PAYMENT_INDICATOR","DIVISION_CODE","BENEFICIARY_CODE","ADVICE_NUMBER"}; context.put("title","testing Velocity"); context.put("$headerString","HEADER"); context.put("fieldList",fieldList); Template template = null; PipedInputStream inStream; BufferedWriter writer ; Thread thread; PipedOutputStream outStream; TemplateCompiler compiler; try { PipedOutputStream outStream = new PipedOutputStream(); BufferedWriter writer = new BufferedWriter(new, OutputStreamWriter(outStream)); // Connect input stream to output stream inStream = new PipedInputStream(outStream); compiler = new TemplateCompiler(inStream); thread = new Thread(compiler); thread.start(); template.merge(context, writer); tpl = getTemplate("BasicReport.vm"); // tpl = getTemplate("hello.vm"); } catch (ResourceNotFoundException e) { e.printStackTrace(); } catch (ParseErrorException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { if (writer != null) { writer.flush(); writer.close(); } } thread.join();// Get compiled reportreturn (compiler.getJasperReport()); } } any assistance will be greatly appreciated Link to comment Share on other sites More sharing options...
mmutleab Posted August 14, 2007 Share Posted August 14, 2007 hiim having the same problem an facing the same situation.i only started using jasper early this year.so i sumtyms find problems getting around. how do 1 use this class.i looked at the sample application distributed with jasperreports but i can seem to find my way around this.pls help.im using tomcat 5.5 netbeans,(ireports) where do i need to start.i've looked at the ibm application tutorial but i cant seem to get there. pls assist with other tutorial or help me get there Link to comment Share on other sites More sharing options...
gbegley Posted August 14, 2007 Share Posted August 14, 2007 If you are trying to dynamically display a report for an arbitrary JDBC result, I would take the velocity approach. Execute the queryPass the ResultSetMetaData ($meta) to the VelocityEngineIterate the columns to build your dynamic components Code:#foreach($i in [1..$meta.columnCount]) <field name="${meta.getColumnName( $i )}" class="java.lang.String"/>#end Do the same with your static text ($meta.getColumnLabel($i)) in your header and text fields (\$F{$meta.getColumnName($i)}) in your detail bands. Dynamically building a report definition requires a fairly deep understanding of the report structure, so if you have not already done so, I recommend getting the ultimate guide. * Pro can be done with just objects* Con requires velocity setup. You could also generate an XML representaion of the ResultSetMetaData and process it with an XSL template that has the desired report structure. * Pro can be done with basic jvm1.4+* Con requires intermediary xml step.Post edited by: gbegley, at: 2007/08/14 15:42 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now