Bonjour à tous (et à toute, on sait jamais...).
Je suis archi-débutant en Jasper, et comme tout noobs j'ai cherché des tuto pour m'aider à comprendre.
J'ai donc déjà parcourus les tuto de base, installé iReport, Jasper, créé un rapport de test (qui prend en input un csv), que j'ai compilé, et le preview fonctionne bien.
Maintenant, voici ce que j'aimerais faire :
Utiliser Java pour combiner (
fill si j'ai bien compris) mon rapport et un CSV.
J'ai regardé les différents tuto à ce sujet, donc celui d'
Eric Reboisson, et d'autre (
jasperforge).
Et j'avoue que je suis un peu perdu. Je cherche "juste" un tuto m'expliquant les différentes étapes, les inputs et outputs, et surtout, qui fonctionne.
A l'heure actuelle, je n'ai pas mieux qu'une java.lang.NoClassDefFoundError
POur les courageux, voici mon source Java :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRCsvDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import com.mysql.jdbc.Driver;
import java.util.Map;
public class GenerateReport {
public static final String RAPPORT_PATH = "C:\\Users\\pama\\Documents\\Report\\reportPublicationTest.jasper";
public static final String DATA_PATH = "C:\\Users\\pama\\Documents\\Report\\test\\test.csv";
public static final String RESULT_PATH = "C:\\temp\\reportPublicationTest.pdf";
// Ecrire sur la sortie standard
public static final void echo(String msg){
System.out.println(msg);
}
public static final void echoErr(String msg){
System.err.println(msg);
}
private static JRCsvDataSource getDataSource() throws JRException{
String[] columnNames = new String[]{"Lieu", "ISBN", "Titre"};
JRCsvDataSource ds = new JRCsvDataSource(JRLoader.getLocationInputStream(DATA_PATH));
ds.setFieldDelimiter(';');
ds.setRecordDelimiter("\r\n");
ds.setColumnNames(columnNames);
return ds;
}
public static void fill() throws JRException
{
long start = System.currentTimeMillis();
//Preparing parameters
Map<String,Object> parameters = new HashMap<String,Object>();
parameters.put("ReportTitle", "Test Report");
parameters.put("DataFile", "CsvDataSource.txt - CSV data source");
Set<String> states = new HashSet<String>();
states.add("Active");
states.add("Trial");
parameters.put("IncludedStates", states);
echo(">> 01 >>");
JRCsvDataSource ds = getDataSource();
echo(">> 02 >>");
JasperFillManager.fillReportToFile(RAPPORT_PATH, parameters, ds);
echo(">> 03 >>");
System.err.println("Filling time : " + (System.currentTimeMillis() - start));
}
/**
* @param args
*/
public static void main(String[] args) {
try{
fill();
}
catch(JRException e1){
echoErr(e1.getMessage());
e1.printStackTrace();
}
} |
Qui me retourne la trace suivante :
Code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
>> 01 >>
>> 02 >>
Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/groovy/control/CompilationFailedException
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2357)
at java.lang.Class.getConstructor0(Class.java:2671)
at java.lang.Class.newInstance0(Class.java:321)
at java.lang.Class.newInstance(Class.java:303)
at net.sf.jasperreports.engine.JasperCompileManager.getCompiler(JasperCompileManager.java:469)
at net.sf.jasperreports.engine.JasperCompileManager.loadEvaluator(JasperCompileManager.java:235)
at net.sf.jasperreports.engine.fill.JRFillDataset.createCalculator(JRFillDataset.java:427)
at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:363)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:77)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:87)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:57)
at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:142)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:78)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:624)
at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:513)
at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:465)
at GeneratePDF.fill(GeneratePDF.java:147)
at GeneratePDF.main(GeneratePDF.java:157) |
J'ai importé les JARs suivants dans mon projet :
- mysql-connector-java-5.1.6-bin.jar
- jasperreports-4.1.3.jar
- commons-beanutils-1.8.0.jar
- commons-collections-2.1.1.jar
- commons-digester-1.7.jar
- commons-javaflow-20060411.jar
- commons-logging-1.0.4.jar
- iText-2.1.7.jar
- jdt-compiler-3.1.1.jar
Environnement :
- OS : Win 7
- Java 1.5.0.14 (pas le choix)
- iReport 4.1.3
- Jasper 4.1.3
- IDE : Eclipse SDK
Si quelqu'un à une piste ou une idée de grosse bourde que j'aurais commise, je l'en remercie d'avance.
Bonne fin de journée à vous.