2004 IR Help Posted August 20, 2006 Share Posted August 20, 2006 By: Adrian Dimulescu - dadi chart scriptlet real example 2003-11-28 08:03 Hi, anybody has a real chart-generation scriptlet example (one that actually get its data from the report and not from hardcoded arrays?) Thanks in advance, Adrian. By: Adrian Dimulescu - dadi RE: chart scriptlet real example 2003-12-01 06:51 Hello again, I'm coming back to this question, reformulating it: I have a report like this: <group name="site" ... <group name="an" ... <detail ... I attached a scriptlet that contains: public void afterDetailEval() throws JRScriptletException { System.out.println(">>>> afterDetailEval"); } public void beforeDetailEval() throws JRScriptletException { System.out.println(">>>> beforeDetailEval"); } Ok and now the question: is it normal that when running the report, I don't see the debug lines in the two methodes (before and after detail eval) ? Thanks for any ideas ! Adrian. By: Adrian Dimulescu - dadi how are scriptlet callback methods called ? 2003-12-03 02:01 Hello everybody, I still can't get my chart-generating scriptlet to work after reading several times the available documentation and browsing forums :( I have attached a little debug scriptlet to my report; my scriptlet inherits JRAbstractScriptlet; its methods only do a System.out.println for debugging purposes. The group callback methods alse write the name of the groupName String parameter. I find the sequence in which the callback methods are called strange. Could anyone explain it to me ? beforeReportInit beforePageInit beforeColumnInit beforeGroupInit: site beforeGroupInit: an afterGroupInit: an afterGroupInit: site afterColumnInit afterPageInit beforeDetailEval afterDetailEval beforeDetailEval afterDetailEval ... lots of before/afterDetailEval ... beforeDetailEval afterDetailEval beforeGroupInit: site beforeGroupInit: an afterGroupInit: an afterGroupInit: site beforePageInit beforeColumnInit afterColumnInit afterPageInit beforeDetailEval afterDetailEval beforeDetailEval afterDetailEval beforeDetailEval afterDetailEval beforeDetailEval afterDetailEval beforeDetailEval afterDetailEval beforeDetailEval afterDetailEval beforeDetailEval afterDetailEval beforeDetailEval afterDetailEval beforeDetailEval afterDetailEval beforeDetailEval afterDetailEval beforeDetailEval afterDetailEval beforeGroupInit: site beforeGroupInit: an afterGroupInit: an afterGroupInit: site beforeDetailEval afterDetailEval beforePageInit beforeColumnInit afterColumnInit afterPageInit Obviously, I have to groups: "site" and "an". What troubles me is that afterGroupInit is triggered before even the first beforeDetailEval. I would like to put a chart in the groupFooter of the group "an" and I thought I might use afterDetailEval() to add data to an internal array of the scriptlet and afterGroupInit() in order to actually build the chart, at the end of the group. This obviously is not the case. But I really can't understand how could I do that. Which is the callback method which signals the footer of a group ? Needless to say, I would enourmously appreciate some help on this issue. By: Teodor Danciu - teodord RE: how are scriptlet callback methods called 2003-12-03 04:56 Hi, There is no explicit call when a group ends. This is mostly because a group ends where the next one begins. So, beforeGroupInit() could serve as a scriptlet callback for when the group ends, except for the last group, because we do not have an end report scriptlet callback either. I'm studying the possibility to add such a callback for the end of the report. "afterGroupInit" is called even before "beforeDetailEval" because we are talking about "init" operations. Don't interpret "afterGroupInit" as some sort of an "endGroup". The only difference between "beforeXxx" and "afterXxx" is that the first one are called before the engine evaluates the report variables and the second after the report variables were evaluated / incremented. Besides that, the two callbacks are made roughly the same time. I would suggest that you use the scriptlet only to gather data for your chart and I guess you could employ "afterDetailEval" as you would gather the data reading from every record in the data source, and in the group footer, you put an image that has an expression which makes a callback on the scriptlet object to get an instant generated image from the data that was gathered. I hope this helps. Teodor By: Adrian Dimulescu - dadi RE: chart scriptlet real example 2003-12-04 01:36 Hello Teodor, thanks a lot for your answer. It really clarifies a lot. I'll put it to work as soon as I get the chance (again). I may contribute my chart example back to JasperReports -- if you think it is a good idea -- as I think a real chart would be much more informative than the existing ones. I'll let you know what happens when I try it -- but I already have the feeling it will work :) By: Tinku - tinku RE: chart scriptlet real example 2005-02-21 23:33 If you had a solution please mail to tinkumani@yahoo.com, please. By: kai - krenken RE: chart scriptlet real example 2005-02-22 23:41 Why Mail it? Post it here so everyone can use it! By: Tinku - tinku RE: chart scriptlet real example 2005-02-23 01:02 Ok Right Let me post a real example ---------------------------------------JRXML <?xml version="1.0" encoding="UTF-8" ?> <!-- Created with iReport - A designer for JasperReports --> <!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> <jasperReport name="YieldChartReport" columnCount="1" printOrder="Vertical" orientation="Portrait" pageWidth="595" pageHeight="842" columnWidth="535" columnSpacing="0" leftMargin="30" rightMargin="30" topMargin="20" bottomMargin="20" whenNoDataType="NoPages" scriptletClass="com.brainscript.yield.yieldgraph.service.YieldChartReportScriptlet" isTitleNewPage="false" isSummaryNewPage="false"> <property name="ireport.scriptlethandling" value="2" /> <field name="itemId" class="java.lang.String"/> <field name="itemName" class="java.lang.String"/> <field name="fromToDate" class="java.lang.String"/> <field name="yield" class="java.lang.String"/> <field name="fromDate" class="java.lang.String"/> <field name="toDate" class="java.lang.String"/> <variable name="ReportData" class="java.util.ArrayList" resetType="Group" resetGroup="itemId" calculation="System"> </variable> <group name="itemId" isStartNewColumn="false" isStartNewPage="true" isResetPageNumber="false" isReprintHeaderOnEachPage="false" minHeightToStartNewPage="0" > <groupExpression><![CDATA[$F{itemName}]]></groupExpression> <groupHeader> <band height="34" isSplitAllowed="true" > <textField isStretchWithOverflow="false" pattern="" isBlankWhenNull="true" evaluationTime="Now" hyperlinkType="None" > <reportElement mode="Opaque" x="108" y="14" width="100" height="18" forecolor="#000000" backcolor="#FFFFFF" key="textField" stretchType="NoStretch" positionType="FixRelativeToTop" isPrintRepeatedValues="true" isRemoveLineWhenBlank="false" isPrintInFirstWholeBand="false" isPrintWhenDetailOverflows="false"/> <textElement textAlignment="Left" verticalAlignment="Top" rotation="None" lineSpacing="Single"> <font fontName="Arial" pdfFontName="Helvetica" size="10" isBold="false" isItalic="false" isUnderline="false" isPdfEmbedded ="false" pdfEncoding ="Cp1252" isStrikeThrough="false" /> </textElement> <textFieldExpression class="java.lang.String"><![CDATA[$F{itemName}]]></textFieldExpression> </textField> <staticText> <reportElement mode="Opaque" x="17" y="14" width="83" height="14" forecolor="#000000" backcolor="#FFFFFF" key="staticText-1" stretchType="NoStretch" positionType="FixRelativeToTop" isPrintRepeatedValues="true" isRemoveLineWhenBlank="false" isPrintInFirstWholeBand="false" isPrintWhenDetailOverflows="false"/> <textElement textAlignment="Left" verticalAlignment="Top" rotation="None" lineSpacing="Single"> <font fontName="Arial" pdfFontName="Helvetica" size="12" isBold="true" isItalic="false" isUnderline="false" isPdfEmbedded ="false" pdfEncoding ="Cp1252" isStrikeThrough="false" /> </textElement> <text><![CDATA[item]]></text> </staticText> </band> </groupHeader> <groupFooter> <band height="363" isSplitAllowed="true" > <image scaleImage="RetainShape" vAlign="Top" hAlign="Left" isUsingCache="true" evaluationTime="Now" hyperlinkType="None"> <reportElement mode="Opaque" x="5" y="2" width="522" height="360" forecolor="#000000" backcolor="#FFFFFF" key="image-1" stretchType="NoStretch" positionType="FixRelativeToTop" isPrintRepeatedValues="true" isRemoveLineWhenBlank="false" isPrintInFirstWholeBand="false" isPrintWhenDetailOverflows="false"/> <graphicElement stretchType="NoStretch" pen="None" fill="Solid" /> <imageExpression class="java.awt.Image"><![CDATA[((com.brainscript.yield.yieldgraph.service.YieldChartReportScriptlet)$P{REPORT_SCRIPTLET}).generateGraph()]]></imageExpression> </image> </band> </groupFooter> </group> <background> <band height="0" isSplitAllowed="true" > </band> </background> <title> <band height="14" isSplitAllowed="true" > </band> </title> <pageHeader> <band height="34" isSplitAllowed="true" > <textField isStretchWithOverflow="false" pattern="" isBlankWhenNull="true" evaluationTime="Now" hyperlinkType="None" > <reportElement mode="Opaque" x="92" y="15" width="83" height="14" forecolor="#000000" backcolor="#FFFFFF" key="textField" stretchType="NoStretch" positionType="FixRelativeToTop" isPrintRepeatedValues="true" isRemoveLineWhenBlank="false" isPrintInFirstWholeBand="false" isPrintWhenDetailOverflows="false"/> <textElement textAlignment="Left" verticalAlignment="Top" rotation="None" lineSpacing="Single"> <font fontName="Arial" pdfFontName="Helvetica" size="10" isBold="false" isItalic="false" isUnderline="false" isPdfEmbedded ="false" pdfEncoding ="Cp1252" isStrikeThrough="false" /> </textElement> <textFieldExpression class="java.lang.String"><![CDATA[$F{fromDate}]]></textFieldExpression> </textField> <textField isStretchWithOverflow="false" pattern="" isBlankWhenNull="true" evaluationTime="Now" hyperlinkType="None" > <reportElement mode="Opaque" x="324" y="15" width="83" height="14" forecolor="#000000" backcolor="#FFFFFF" key="textField" stretchType="NoStretch" positionType="FixRelativeToTop" isPrintRepeatedValues="true" isRemoveLineWhenBlank="false" isPrintInFirstWholeBand="false" isPrintWhenDetailOverflows="false"/> <textElement textAlignment="Left" verticalAlignment="Top" rotation="None" lineSpacing="Single"> <font fontName="Arial" pdfFontName="Helvetica" size="10" isBold="false" isItalic="false" isUnderline="false" isPdfEmbedded ="false" pdfEncoding ="Cp1252" isStrikeThrough="false" /> </textElement> <textFieldExpression class="java.lang.String"><![CDATA[$F{toDate}]]></textFieldExpression> </textField> <staticText> <reportElement mode="Opaque" x="3" y="15" width="83" height="14" forecolor="#000000" backcolor="#FFFFFF" key="staticText-1" stretchType="NoStretch" positionType="FixRelativeToTop" isPrintRepeatedValues="true" isRemoveLineWhenBlank="false" isPrintInFirstWholeBand="false" isPrintWhenDetailOverflows="false"/> <textElement textAlignment="Left" verticalAlignment="Top" rotation="None" lineSpacing="Single"> <font fontName="Arial" pdfFontName="Helvetica" size="12" isBold="true" isItalic="false" isUnderline="false" isPdfEmbedded ="false" pdfEncoding ="Cp1252" isStrikeThrough="false" /> </textElement> <text><![CDATA[From]]></text> </staticText> <staticText> <reportElement mode="Opaque" x="232" y="15" width="83" height="14" forecolor="#000000" backcolor="#FFFFFF" key="staticText-1" stretchType="NoStretch" positionType="FixRelativeToTop" isPrintRepeatedValues="true" isRemoveLineWhenBlank="false" isPrintInFirstWholeBand="false" isPrintWhenDetailOverflows="false"/> <textElement textAlignment="Left" verticalAlignment="Top" rotation="None" lineSpacing="Single"> <font fontName="Arial" pdfFontName="Helvetica" size="12" isBold="true" isItalic="false" isUnderline="false" isPdfEmbedded ="false" pdfEncoding ="Cp1252" isStrikeThrough="false" /> </textElement> <text><![CDATA[To]]></text> </staticText> </band> </pageHeader> <columnHeader> <band height="0" isSplitAllowed="true" > </band> </columnHeader> <detail> <band height="0" isSplitAllowed="true" > </band> </detail> <columnFooter> <band height="0" isSplitAllowed="true" > </band> </columnFooter> <pageFooter> <band height="0" isSplitAllowed="true" > </band> </pageFooter> <summary> <band height="0" isSplitAllowed="true" > </band> </summary> </jasperReport> ----------------------Scriptlet /* * @ (#) YieldChartReportScriptlet.java version 1.0 Feb 22, 2005 * Copyright 2005 Brainscript Tech, All rights reserved. * PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package com.brainscript.yield.yieldgraph.service; import java.awt.Color; import java.awt.Image; import java.awt.Paint; import java.util.ArrayList; import java.util.Iterator; import net.sf.jasperreports.engine.JRDefaultScriptlet; import net.sf.jasperreports.engine.JRScriptletException; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.CategoryLabelPositions; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.labels.ItemLabelAnchor; import org.jfree.chart.labels.ItemLabelPosition; import org.jfree.chart.labels.StandardCategoryLabelGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.chart.renderer.category.BarRenderer3D; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.ui.TextAnchor; /** * TODO Details Of File * * @version 1.0 Feb 22, 2005 * @author Tinku */ public class YieldChartReportScriptlet extends JRDefaultScriptlet { //public static boolean groupCmplted=false; public void beforeDetailEval() throws JRScriptletException { String fromToDate=(String) this.getFieldValue("fromToDate"); String yield=(String)this.getFieldValue("yield"); ArrayList arrayList=(ArrayList) this.getVariableValue("ReportData"); if(arrayList==null)arrayList=new ArrayList(); arrayList.add(new FromToYieldObject(fromToDate,yield)); this.setVariableValue("ReportData",arrayList); } public Image generateGraph() { try{ ArrayList ReportData= (ArrayList) this.getVariableValue("ReportData"); DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset(); for (Iterator reportIter = ReportData.iterator(); reportIter.hasNext();) { FromToYieldObject fromToObject = (FromToYieldObject) reportIter.next(); defaultcategorydataset.addValue(Double.parseDouble(fromToObject.getYield()), "Yield", fromToObject.getFromToDate()); } JFreeChart chart=ChartFactory.createBarChart3D("Yield Analysis","Range","Yield",defaultcategorydataset,PlotOrientation.VERTICAL,false,false,true); CategoryPlot categoryplot = chart.getCategoryPlot(); categoryplot.setDomainGridlinesVisible(true); CategoryAxis categoryaxis = categoryplot.getDomainAxis(); categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.toRadians(355))); BarRenderer3D barrenderer3d = (BarRenderer3D)categoryplot.getRenderer(); barrenderer3d.setDrawBarOutline(true); CustomRenderer customrenderer = new CustomRenderer(new Paint[] { Color.red, Color.blue, Color.green, Color.yellow, Color.orange, Color.cyan, Color.magenta, Color.gray }); ItemLabelPosition itemlabelposition = new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.CENTER, TextAnchor.CENTER, Math.toRadians(90D)); customrenderer.setPositiveItemLabelPosition(itemlabelposition,true); customrenderer.setNegativeItemLabelPosition(itemlabelposition,true); customrenderer.setItemLabelsVisible(true); categoryplot.setRenderer(customrenderer); this.setVariableValue("ReportData",null); return chart.createBufferedImage(522,360); }catch(JRScriptletException exception){exception.printStackTrace();} return null; } static class CustomRenderer extends BarRenderer3D { public Paint getItemPaint(int i, int j) { return colors[j % colors.length]; } private Paint colors[]; public CustomRenderer(Paint apaint[]) { colors = apaint; } } class FromToYieldObject { private String fromToDate; private String yield; public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) .append("fromToDate", fromToDate).append("yield", yield) .toString(); } /** * @param fromToDate * @param yield */ public FromToYieldObject(String fromToDate, String yield) { super(); this.fromToDate = fromToDate; this.yield = yield; } public String getFromToDate() { return fromToDate; } public void setFromToDate(String fromToDate) { this.fromToDate = fromToDate; } public String getYield() { return yield; } public void setYield(String yield) { this.yield = yield; } } } //End of class YieldChartReportScriptlet.java 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