锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
*
Title: JRDataSourceAdapter
*
Description: Converting JRDataSource to Mapped ArrayList
*
Copyright: Copyright (c) 2004
*
Company: *****
* @author zephyr
* @version 1.0
*/
package xyz;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.design.*;
import java.util.*;
public class JRDataSourceAdapter
{
public static Map JRDataSource2Map(JRDataSource dataSource, String[] fieldNames,
Class[] fieldClasses) throws JRException
{
HashMap result;
if (fieldNames.length != fieldClasses.length)
{
throw new JRException("Number of Field Name & Class unmatch");
}
JRDesignField[] fields = new JRDesignField[fieldNames.length];
result = new HashMap(4);
for (int i = 0; i < fieldNames.length; i++)
{
fields[i] = new JRDesignField();
fields[i].setName(fieldNames[i]);
fields[i].setValueClass(fieldClasses[i]);
result.put(fieldNames[i], new ArrayList());
}
do
{
for (int i = 0; i < fields.length; i++)
{
Object value = dataSource.getFieldValue(fields[i]);
((ArrayList) result.get(fields[i].getName())).add(value);
}
}
while (dataSource.next());
return result;
}
}
/**
*
Title: GraphProvider
*
Description: Generate JFreeChart Image
*
Copyright: Copyright (c) 2004
*
Company: ****
* @author zephyr
* @version 1.0
*/
package xyz;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.design.*;
import net.sf.jasperreports.engine.export.*;
import org.jfree.chart.*;
import org.jfree.chart.axis.*;
import org.jfree.chart.plot.*;
import org.jfree.data.*;
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import java.util.*;
public class GraphProvider
{
public static Image getImage(Map dataSource, String fieldNameX, String fieldNameY,
String chartName, String titleX, String titleY, boolean isBarChart, int imageWidth,
int imageHeight) throws JRException
{
JRDesignField fieldX = new JRDesignField();
fieldX.setName(fieldNameX);
fieldX.setValueClass(java.lang.String.class);
JRDesignField fieldY = new JRDesignField();
fieldY.setName(fieldNameY);
fieldY.setValueClass(java.lang.Double.class);
ArrayList periods = (ArrayList) dataSource.get(fieldNameX);
ArrayList values = (ArrayList) dataSource.get(fieldNameY);
DefaultCategoryDataset categoryDs = new DefaultCategoryDataset();
for (int i = 0; i < values.size(); i++)
{
Object obj = values.get(i);
double dataValue = 0;
if (obj != null)
{
dataValue = ((Double) obj).doubleValue();
}
categoryDs.addValue(dataValue, null, (String) periods.get(i));
}
JFreeChart c = null;
if (isBarChart)
{
c = ChartFactory.createBarChart(chartName, titleX, titleY, categoryDs,
PlotOrientation.VERTICAL, false, false, false);
}
else
{
c = ChartFactory.createLineChart(chartName, titleX, titleY, categoryDs,
PlotOrientation.VERTICAL, false, false, false);
}
c.getTitle().setFont(new Font("Arial", Font.BOLD, 16));
NumberAxis axis = (NumberAxis) c.getCategoryPlot().getRangeAxis();
axis.setAutoRange(true);
TickUnitSource tickUnits = NumberAxis.createIntegerTickUnits();
axis.setStandardTickUnits(tickUnits);
return (c.createBufferedImage(imageWidth, imageHeight));
}
}
4:鏁版嵁婧?
濡傝涓烘姤琛ㄦ寚瀹氫竴涓暟鎹簮,鍒欓渶瑕佸疄鐜癲ori.jasper.engine.JRDataSource鎺ュ彛,涔熷氨鏄疄鐜頒笅闈?涓柟娉?
public boolean next() throws JRException;
public Object getFieldValue(JRField jrField) throws JRException;
濡傛灉鎶ヨ〃鎸囧畾鐨勬槸Connection,鍒欏彲浠ュ湪xml涓寚瀹氭煡璇㈣鍙?
<queryString><![CDATA[SELECT * FROM Orders]]></queryString>
5:璁$畻:
<variable name="QuantitySum" class="java.lang.Double" calculation="Sum">
<variableExpression>$F{Quantity}</variableExpression>
</variable>
Step2 瑙e帇杞歡鍖呭埌鏌愪釜鐩綍D:\Ming\Programs\iReport. 鍦ㄨ繖涓洰褰曚笅鍒涘緩涓涓猻tartup.bat鏂囦歡鍐呭濡備笅錛堥渶瑕佸仛鍝嶅簲鏀瑰彉錛夛細
@echo off
set JAVA_HOME=d:\j2sdk
set ANT_HOME=D:\Ming\Programs\ant
set IREPORT_HOME=D:\Ming\Programs\iReport
rem %ANT_HOME%\bin\ant javadocs
%ANT_HOME%\bin\ant iReport
Step3 浠ュ悗鍙屽嚮榪欎釜鏂囦歡灝卞彲浠ュ惎鍔╥Report銆?/P>
Step4 鍒癕ySQL瀹樻柟緗戠珯涓嬭澆MySQL Connector/J 3.1,榪欐槸涓涓狹ysql鐨凧DBC椹卞姩鍖咃紝涓轟簡鏀寔榪炴帴mysql5.0銆傝В鍘嬭繖涓寘錛屾妸mysql-connector-java-3.1.8-bin.jar鏀懼埌iReport鐨刲ib鐩綍涓嬨傛妸鍘熸潵鐨勭殑mysql-connector-java-3.0.8-stable-bin.jar鍒犻櫎銆?/P>
Step5 鍚姩mysql鏈嶅姟錛岄噸鍚痠Report銆?/P>
Step6 鍦╥Report鐨凞atesource鑿滃崟Connections瀛愯彍鍗曢噷寤虹珛JDBC鏁版嵁榪炴帴銆?BR> Name: report (娉細闅忎究涓涓悕縐?
JDBC Driver: com.mysql.jdbc.Driver
JDBC URL: jdbc:mysql://localhost/report
Server Address: localhost
Database: report (娉細mysql鐨勪竴涓暟鎹簱)
User name: root (鎴栬呭叾浠栫敤鎴峰悕)
Password: 瀵嗙爜
Step7 鍦╮eport鏁版嵁搴撻噷鍒涘緩琛╣roups錛屽叡5涓瓧孌碉細id,Year,Month,Day,Hour錛孌ata閮芥槸Integer綾誨瀷銆侷d鏄嚜澧為暱綾誨瀷錛屼綔涓轟富閿傚茍鎻掑叆涓浜涙暟鎹傛垜浠垎鍒寜Year錛孧onth錛宒ay鍒嗙粍錛屾樉紺篋ata鍊箋?/P>
Step8 鏂板緩涓涓寘琛ㄥ茍涓斾繚瀛橈紝Datasource |Report Query涓烘姤琛ㄦ坊鍔燬QL璇彞錛?BR> select * from groups order by Year,Month,Day,Hour
Step9 涓烘姤琛ㄦ坊鍔?涓粍錛歒ear錛孧onth錛孌ay銆傛坊鍔犳柟娉曪細鐐瑰嚮宸ュ叿鏍忕殑Groups鎸夐挳錛孨ew錛岃煩鍑虹殑瀵硅瘽妗嗕腑錛岃瀹氾紙Year group涓句緥錛夛細 Group Name錛歒ear
Group Expression錛?F{Year}
姝ゆ椂鎶ヨ〃鐨勯〉闈㈠嚭鐜癥ear Header銆?/P>
Step10 鍦ㄦ姤琛ㄤ腑濉叆鏍囬錛屽崟鍑籘宸ュ叿鏍忔寜閽紝鍦ㄦ姤琛ㄤ腑鐨凥eader鏍忎腑鎷変竴涓鍑烘潵錛屽彸閿紝閫夋嫨property淇敼鍐呭鍜屽瓧浣撱備笌姝ょ被浼鹼紝鍦╟olumns鏍忎腑娣誨姞5涓錛屽垎鍒槸"騫?錛?鏈?錛?鏃?錛?鏃?錛?鏁版嵁"銆傚茍鐢ㄧ洿綰挎妸浠栦滑鍒嗗紑銆傚弬鑰冮檮鍥俱?/P>
Step11 鍦ㄦ姤琛ㄤ腑濉叆鍒嗙粍鏁版嵁鐨凢ield銆傛坊鍔犳柟娉曪紝浠ear涓轟緥錛岀偣鍑誨伐鍏鋒爮鐨凢鎸夐挳錛屽湪"騫?鍒楋紝Yeargroup琛屽搴旂殑鍦版柟錛屾媺鍑轟竴涓狥ield妗嗭紝鍙沖嚮閫夋嫨灞炴э紝鍦═extField鏍囩閲屼慨鏀逛袱欏瑰唴瀹癸細TextField Expression Class錛歫ava.lang.Integer銆俆extField Expression錛?F{Year}銆?/P>
Step12 鍦ㄦ姤琛ㄤ腑濉叆璁板綍鏁版嵁銆傚湪Detail琛岋紝"鏃?錛?鏁版嵁"鍒楀垎鍒媺涓や釜Field妗嗭紝淇敼TextField鏍囩閲岄潰鐨勫唴瀹逛笌Step11綾諱技銆?/P>
Step13 寤虹珛鎶ヨ〃鍜屾暟鎹簮鐨勮繛鎺ャ傞夋嫨鑿滃崟錛欱uild|Set Active Connection銆?/P>
Step14 鐐瑰嚮Run Report With connection銆?/P>
1.璁捐鍥?/TD> | ![]() |
2. 棰勮鍥?/TD> | ![]() |