Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Jasper
Jasper Forum d'entraide sur Jasper Reports. Avant de poster --> FAQ Jasper, Tutoriels Jasper
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/01/2008, 09h31   #1
Invité de passage
 
Inscription : janvier 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 3
Points : 0
Points : 0
Par défaut Génération de XLS avec JasperReport et PHP

Bonjour à tous

J'ai suivi avec succés ce superbe tutoriel qui correspondait presque exactement à ce que je cherchais:
http://charly-clairmont.developpez.c...asper-reports/

Pourquoi presque ?

Tout simplement parce que j'ai besoin de sortir mes rapports en format XLS et non pas PDF.

Le soucis c'est que je ne sais pas ce que je dois modifier au script PHP fourni dans l'exemple du tutoriel afin d'y parvenir.

En farfouillant sur le site de jasper j'ai bien compris que je devait utiliser une classe spécifique pour le XLS à la place de celle de PDF.
Mais même en la mettant dans mon code à la place de l'autre j'ai un superbe message d'erreur.

Code :
1
2
3
4
5
6
7
8
9
10
11
 
java stack trace: [[o:ByteArrayOutputStream]:"java.lang.Exception: Invoke failed: [[c:JasperExportManager]]->exportReportToXlsFile([o:JasperPrint], [o:PhpParserString]). 
Cause: java.lang.NoSuchMethodException: exportReportToXlsFile([o:JasperPrint], [o:PhpParserString]). 
Candidates: [] Responsible VM: 1.6.0@http://java.sun.com/ 
at php.java.bridge.JavaBridge.Invoke(JavaBridge.java:1045) 
at php.java.bridge.Request.handleRequest(Request.java:405) 
at php.java.bridge.Request.handleRequests(Request.java:481) 
at php.java.bridge.JavaBridge.run(JavaBridge.java:213) 
at php.java.bridge.ThreadPool$Delegate.run(ThreadPool.java:58) 
Caused by: java.lang.NoSuchMethodException: exportReportToXlsFile([o:JasperPrint], [o:PhpParserString]). 
Candidates: [] ... 5 more "]
Voilà mon code:
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
 
<?php
$reportsPath ="/var/www/rapport/reports/";
//$reportFileName = "classic";
$reportFileName = $_GET["jrxml"];
$jasperReportsLib = "/var/www/rapport/lib/";
if(extension_loaded('java')) {
// lecture du rértoire oùt rengéles librairies utiles à asperReports
$handle = @opendir($jasperReportsLib);
// ajout de tous les fichier jar au chemin de classe (Class Path)
while(($new_item = readdir($handle))!==false) {
$java_library_path .= 'file:'.$jasperReportsLib.'/'.$new_item .';';
}
try {
// chargement des librairies au classpath
java_require($java_library_path);
// créion de la connexion JDBC
$Conn = new Java("org.altic.jasperReports.JdbcConnection");
// driver
$Conn->setDriver("com.mysql.jdbc.Driver");
 
// url de connexion
$Conn->setConnectString("jdbc:mysql://");
 
// utilisateur
 
$Conn->setUser("");
 
// mot de passe
 
$Conn->setPassword("");
 
// Compilation du fichier JRXML en fichier Jasper
 
$sJcm = new JavaClass("net.sf.jasperreports.engine.JasperCompileManager");
 
$report = $sJcm->compileReport($reportsPath .$reportFileName.".jrxml");
 
// Remplir le modéle avec les données
 
$sJfm = new JavaClass("net.sf.jasperreports.engine.JasperFillManager");
 
$print = $sJfm->fillReport(
 
$report, new Java("java.util.HashMap"),$Conn->getConnection());
 
/*
// Export du fichier au format pdf
 
$sJem = new JavaClass("net.sf.jasperreports.engine.JasperExportManager");
 
$sJem->exportReportToPdfFile($print, $reportsPath .$reportFileName.".pdf");
 
if (file_exists($reportsPath .$reportFileName.".pdf")){
 
header('Content-disposition: attachment; filename="'.$reportFileName.'.pdf"');
header('Content-Type: application/pdf');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '. @filesize($reportsPath . $reportFileName.".pdf"));
header('Pragma: no-cache');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
set_time_limit(0);
@readfile($reportsPath .$reportFileName.".pdf") or die("problem occurs.");
*/
 
// début modifs XLS
// Export du fichier au format pdf
 
$sJem = new JavaClass("net.sf.jasperreports.engine.JasperExportManager");
 
$sJem->exportReportToXlsFile($print, $reportsPath .$reportFileName.".xls");
 
if (file_exists($reportsPath .$reportFileName.".xls")){
 
header('Content-disposition: attachment; filename="'.$reportFileName.'.xls"');
header('Content-Type: application/xls');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '. @filesize($reportsPath . $reportFileName.".xls"));
header('Pragma: no-cache');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
set_time_limit(0);
@readfile($reportsPath .$reportFileName.".xls") or die("problem occurs.");
 
// fin modifs XLS
}
 
 
} catch (JavaException $ex) {
 
$trace = new Java("java.io.ByteArrayOutputStream");
 
$ex->printStackTrace(new Java("java.io.PrintStream", $trace));
 
print "java stack trace: $trace\n";
 
}
 
}
?>
Quelqu'un pourrait m'aider ?

Merci d'avance !
tahiworld est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2008, 16h00   #2
Invité de passage
 
Inscription : janvier 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 3
Points : 0
Points : 0
Personne ne fait du jasperreport avec PHP ?
tahiworld est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2008, 09h18   #3
Membre actif
 
Avatar de tnodev
 
Inscription : mai 2005
Messages : 160
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2005
Messages : 160
Points : 155
Points : 155
Bonjour,

je ne fais pas de php, mais la méthode exportReportToXlsFile de la classe JasperExportManager n'existe pas !

http://jasperreports.sourceforge.net...rtManager.html
tnodev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2008, 11h02   #4
Invité de passage
 
Inscription : janvier 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 3
Points : 0
Points : 0
Bonjour

Merci de ta réponse.

J'ai en effet remarqué cela aprés avoir tatonné sur le site de Jasper pour essayer de comprendre comment faire.

Cependant je ne comprends pas comment faire car je ne connais pas du tout Java.

Si tu pouvais me donner un exemple en java avec les commentaires pour m'expliquer ce qu'il se passe pas à pas je pourrais essayer de le transcrire en PHP.

Merci d'avance.
tahiworld est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2008, 11h50   #5
Membre éclairé
 
Inscription : avril 2007
Messages : 195
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 195
Points : 320
Points : 320
Par défaut Rapide exemple d'un export vers un fichier Excel

Salut,

voici un exemple rapide de code java qui permet de charger un fichier JRXML et de l'exporter après remplissage vers un fichier Excel.
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
84
85
86
87
88
89
90
91
92
93
94
95
96
/**
 * 
 */
package com.jaspersoft.support;
 
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.Map;
 
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
 
/**
 * Class that explains how to transform a JRXML file to a PDF report
 * 
 * @author candre
 */
public class myMainClass {
	//The folder where your JRXML file is located
	static String myWorkFolder = "C:";
 
	//JRXML file you want to export to a report
	static String myJrxmlFile = "myJrxmlFile.jrxml";
 
	//Name of the XLS export of your report
	static String myXlsFile = "myXlsFile.xls";
 
	@SuppressWarnings("unchecked")
	public static void main(String[] args) throws JRException {
		//We retrieve the jrxml file we want to use
		File file = new File(myWorkFolder, myJrxmlFile);
		JasperDesign design = JRXmlLoader.load(file);
 
		//We compile it to obtain a binary read-only version of the report
		JasperReport report = JasperCompileManager.compileReport(design);
 
		//We fill it with the data from the database
		JasperPrint jasperPrint = JasperFillManager.fillReport(report, null, getConnection());
 
		//We export it to an Excel file
		//Adapted from the sample classes shipped with JasperReports
		Map dateFormats = new HashMap();
		dateFormats.put("EEE, MMM d, yyyy", "ddd, mmm d, yyyy");
		File destFile = new File(myWorkFolder, myXlsFile);
 
		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.TRUE);
		exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);
		exporter.setParameter(JRXlsExporterParameter.FORMAT_PATTERNS_MAP, dateFormats);
 
		exporter.exportReport();
	}
 
	/**
	 * Method used to retrieve a {@link Connection} to the MySQL database.
	 * 
	 * @return Connection object to the MySQL database.
	 */
	static Connection getConnection() {
		//URL you use to access the database (same as the "JDBC URL" field in iReport)
		String jdbcUrl = "jdbc:mysql://localhost/foodmart";
 
		//Login you use to access the database
		String user = "root";
 
		//Password corresponding to the login you use to access the database
		String password = "myPassword";
 
		Connection con = null;
 
		try {
			//We indicate we want to use the MySQL driver
			Class.forName("com.mysql.jdbc.Driver");
 
			//We create the connection
			con = DriverManager.getConnection(jdbcUrl, user, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
 
		return con;
	}
}
Cordialement,

******************
Christopher André
Sales Engineer, EMEA

JasperSoft Corporation
candre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2008, 12h42   #6
Invité de passage
 
Inscription : juin 2007
Messages : 5
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : juin 2007
Messages : 5
Points : 2
Points : 2
Merci !

Je vais voir ce que je peux faire avec
tahiboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2008, 16h13   #7
Membre à l'essai
 
Inscription : décembre 2007
Messages : 23
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 23
Points : 23
Points : 23
salut

Tout d'abord merci à Christopher André pour le code java permettant de faire l'export au format excel.

J'ai repris ton code mot pour mot en l'adaptant à ma connexion et à mon fichier d'entrée. Mais j'ai quelques petits soucis.

1) la première instruction (package com.jaspersoft.support) me génère l'erreur de compilation suivante :
The declared package "com.jaspersoft.support" does not mach the expected package

Est ce que le but de cette instruction est bien de créer le package com.jaspersoft.support ? Si c'est le cas, elle ne m'est pas forcément indispensable.

2) Comme je ne souhaite pas créer de package, j'ai mis cette instruction en commentaire et j'ai exécuté ma classe (run as Java Application sous eclipse 3.3.0). J'obtiens l'erreur suivante :
Exception in thread "main" java.lang.NoclassDefFounderror: org/apache/poi/hssf/usermodel/HSSFCellStyle at myMainClass.main(myMainClass.java:76)

Quelqu'un a-t-il réussit à utiliser ce programme java ? Ou quelqu'un serait il comment réglé ces problèmes ?

Sami
lc2ms est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2008, 20h23   #8
Membre à l'essai
 
Inscription : décembre 2007
Messages : 23
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 23
Points : 23
Points : 23
J'ai réussit à résoudre mon erreur d'exécution décrite dans mon 2)

En fait il me manquait la librairie suivante :
poi-3.0.1-FINAL-20070705.jar
que j'ai récupéré dans le dossier C:\Program Files\JasperSoft\iReport-2.0.2\lib (qu'on peut également téléchager ici : http://www.apache.org/dyn/closer.cgi/jakarta/poi/)

Et finalement j'obtiens bien un fichier excel mais bon le formatage est totalement à revoir (il saute certaines lignes ou certaines colonnes, tout est blanc...)

Sami
lc2ms est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2008, 23h56   #9
Invité de passage
 
Inscription : janvier 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 4
Points : 2
Points : 2
Par défaut formatage des données en excel

effectivement le formatage est à revoir. mais comment formater les données pour que excel les affiche correctement et exatement comme dans le pdf. jespere avoir une reponse. merci d'avance
Dikoudogo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h34.


 
 
 
 
Partenaires

Hébergement Web