salut,
je fais quelque lecture sur le net je trouve que le Jasper Reports génère de document de type PDF pour moi je veux génère de document de type DOC. comment fais? que est ce que j'utilise?
Merci
salut,
je fais quelque lecture sur le net je trouve que le Jasper Reports génère de document de type PDF pour moi je veux génère de document de type DOC. comment fais? que est ce que j'utilise?
Merci
Bonjour,
J'utilise jasperserver pour lancer mes rapports jasper et il y a dedans des outils d'export vers divers formats dont rtf (donc doc).
Il doit y avoir certainement des moyens plus directs pour obtenir celà mais je ne suis pas un champion de l'utilisation fine de JasperReport.
Au fil de ce que je lis dans les forums, je crois comprendre qu'en utilisant également l'interface Web Services de jasperserver, tu peux lancer l'édition d'un rapport depuis un client et tu dois pouvoir préciser quel format de sortie tu désires (html,pdf,rtf,excel,...)
Espérant t'avoir été utile ...
Merci de ta réponse ,
je ne trouve pas la méthode qui peux me génère un document de type word (.doc).
D'autre part je utilise un toturial sur la site www.developpez.com. mais il me return un erreur
y a t'il quelque me donne un autre toturial pour démarrer par une 1er exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part JasperReport jasperReport = JasperCompileManage.compileReport(jasperDesign);
Je n'appelle pas les rapports à partir de Java mais de jasperserver, alorrs je ne peux t'aider plus car je ne connais pas trop. Par contre, ne te focalise pas trop sur le .doc : si tu trouves une méthode qui te donnes du .rtf je pense que ca sera équivalent puisque word sait lire du .rtf
Primo essaie de ne pas passer par une compilation, tu dois utiliser directement par le fichier jasper au lieu de passer par une compilation du fichier jrxml car ça risque de dégrader les temps de réponses, certaines me diront que cel se fait dans unlaps de temps très court mais bon...tant que tu as ton fichier jasper (sinon tu le génere avec iReport) tu l'utilises.
pour la génération en .doc voici ton bonheur :
ce code est testé et ça marche nickel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 public String viewReportWord() throws SQLException, JRException, IOException { String reportId = "Person"; Driver mDriver = new Driver(); DriverManager.registerDriver(mDriver); Connection connection = DriverManager.getConnection( Constants.DRIVER_DATABASE_MYSQL, Constants.LOGIN_DATABASE_MYSQL, Constants.PASSWORD_DATABASE_MYSQL); File file = new File(Constants.PATH_OF_REPORTS_JASPER); JasperPrint jasperPrint = JasperFillManager.fillReport( new FileInputStream(new File(file, reportId + ".jasper")), null, connection); FacesContext context = FacesContext.getCurrentInstance(); HttpServletResponse response = (HttpServletResponse) context .getExternalContext().getResponse(); if (jasperPrint != null) { ByteArrayOutputStream xlsReport = new ByteArrayOutputStream(); JRRtfExporter exporter = new JRRtfExporter(); exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, xlsReport); exporter.exportReport(); // Send response byte[] bytes = xlsReport.toByteArray(); /******************************************************************* * Pour afficher une boîte de dialogue pour enregistrer le fichier * sous le nom rapport.xls ******************************************************************/ response.addHeader("Content-disposition", "attachment;filename=rapport.doc"); //response.setContentType("application/vnd.ms-excel"); response.setContentType("applicatoin/ms-word"); response.setContentLength(bytes.length); response.getOutputStream().write(bytes, 0, bytes.length); response.getOutputStream().flush(); response.getOutputStream().close(); } else { Writer writer = response.getWriter(); writer.write("Aucun rapport à afficher"); response.setContentType("text/HTML"); } return null; }
juste une question "stupide"
ce code je le mets dans quoi
public String viewReportWord() ...
Bonjour,
J'arrive presque à "compiler" le code ci-dessus "viewReportWord() "dans Eclispe,mais j'ai un problème à cette ligne :
-->c'est souligne en rouge, donc pas "reconnu"
quel "Import" dois-je faire dans mon projet pour qu'il le reconnaisse ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 FacesContext context = FacesContext.getCurrentInstance();
Meci pour votre aide
Tu n'as qu'à télécharger une implémentation JSF (SUN RI par exemple) et importer tous les JARs
Dans ton cas probablement c'est le jsf-impl.jar ou jsf-api.jar qui manque !
je ne crois pas ...
j'ai copié ces 2 "ja" (jsf-impl.jar ou jsf-api.jar) dans mon répertoire lib
Ensuite au niveau du projet :
- Ces 2 nouveaux fichiers apparaissent bien dans la liste
- Ensuite "Add Jar's"
Mais la ligne de code reste tj en erreur !
NB : je n'ai peut-être pas les bonnes versions !
J'ai aussi vu que certains utilisaient cells-ci :
- myfaces-api-1.2.5.jar
- myfaces-impl-1.2.5.jar
mais je n'arrive pas à les télécharger..![]()
bonjour,
j'arrive bien à créer le fichier XLS sur le serveur
Par contre je n'arrive pas à le télécharger correctement
En fait, il ouvre un fichier excel, mais qui n'est celui qu'il vient de créer !
Car à l'ouverture , il remplace les "\\" par des "__"
il m'ouvre donc un fichier(vide) avec ce nom :
Alors qu 'il vient de générer et de créer un rapport excel, ici :"C__Program_Files_Apache_Software_Foundation_Tomcat_5.5_webapps_PRJTOMCAT5_reports_xls_out_xls[2].xls"
L'idéal, bien entendu,C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\PRJTOMCAT5\reports\xls\out_xls.xls
serait qu'il ne créée pas de fichier "xls" sur le seveur et qu'il propose
le popup directement "OUVRIR/ENREGISTRER".
Comme on arrive à le faire avec un rapport généré en PDF
REM:car dans ce cas,il ouvre directement PDF dans Iexplorer(mais le méthode est différente !)
voici le code de ma servlet pour générer un rapport en Excel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.Writer; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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.design.JasperDesign; import net.sf.jasperreports.engine.xml.JRXmlLoader; import net.sf.jasperreports.engine.export.JRRtfExporter; import net.sf.jasperreports.engine.export.JRXlsExporter; import net.sf.jasperreports.engine.export.JRXlsExporterParameter; import java.io.File; public class GenerateServletXLS extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("PRJTOMCAT5.GenerateServletXLS.doGET[access/xls]:1") ; String login = "administrateur"; String password = ""; Connection con =null; // try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(java.lang.ClassNotFoundException e) { System.err.print("ClassNotFoundException (try): "); System.err.println(e.getMessage()); } String dataSourceName = "CompressMDB"; String url = "jdbc:odbc:" + dataSourceName; // try { con = DriverManager.getConnection(url,login,password) ; } catch(SQLException sqle) { System.err.println(sqle.getMessage()); } try { JasperDesign jasperDesign = JRXmlLoader.load("C:\\Program Files\\Apache Software Foundation\\Tomcat 5.5\\webapps\\PRJTOMCAT5\\reports\\sources\\report1.jrxml"); JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); Map parameters = new HashMap(); parameters.put("Titre", "Titre"); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters,con ); String File_dest="C:\\Program Files\\Apache Software Foundation\\Tomcat 5.5\\webapps\\PRJTOMCAT5\\reports\\xls\\out_xls.xls"; File destFile =new File(File_dest); //JRXlsExporter exporter = new JRXlsExporter(); JRRtfExporter exporter = new JRRtfExporter(); exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT,jasperPrint); exporter.setParameter(JRXlsExporterParameter.OUTPUT_FILE_NAME,destFile.toString()); exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.TRUE); exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE); exporter.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE,Boolean.TRUE); exporter.exportReport(); if (jasperPrint != null) { ByteArrayOutputStream xlsReport = new ByteArrayOutputStream(); byte[] bytes = xlsReport.toByteArray(); /******************************************************************* * Pour afficher une boîte de dialogue pour enregistrer le fichier * sous le nom rapport.xls ******************************************************************/ response.addHeader("Content-disposition", "attachment;filename="+destFile.toString()); response.setContentType("application/vnd.ms-excel"); response.setContentLength(bytes.length); response.getOutputStream().write(bytes, 0, bytes.length); response.getOutputStream().flush(); response.getOutputStream().close(); } else { Writer writer = response.getWriter(); writer.write("Aucun rapport à afficher"); response.setContentType("text/HTML"); } } catch (JRException e) { e.printStackTrace(); } finally { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
Je vois que tu as utilisé mon tuto pour la génération de ton fichier Excel. Toutefois, tu as utilisé des trucs que moi j'ai pas utilisé alors que tu demandes le même résultat que le mien
Dans mon cas, lors de la génération du fichier Excel, j'ai bien une boîte OUVRIR/ENREGISTRER et le fichier Excel est correctement généré.
Dans ton code tu as ajouté ceci :
Pourquoi faire ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 String File_dest="C:\\Program Files\\Apache Software Foundation\\Tomcat 5.5\\webapps\\PRJTOMCAT5\\reports\\xls\\out_xls.xls"; File destFile =new File(File_dest);
et après tu fais ceci :
!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 response.addHeader("Content-disposition", "attachment;filename="+destFile.toString());
La variable destFile ne doit servir que pour donner un nom au fichier généré et non pas faire référence à l'emplacement du fichier généré !
Essaie tout court ceci :
Et tu enlèves ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 response.addHeader("Content-disposition", "attachment;filename=unTestExcel.xls");
Tiens nous au courant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 String File_dest="C:\\Program Files\\Apache Software Foundation\\Tomcat 5.5\\webapps\\PRJTOMCAT5\\reports\\xls\\out_xls.xls"; File destFile =new File(File_dest);
Ok,merci,
Voici mon code actuel
J'ai bien le popup qui me demande OUVRIR/ENREGISTRER avec le fichier "newfile.xls"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 ..... JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters,con ); response.addHeader("Content-disposition","attachment;filename=newfile.xls"); ..... JRExporter exporter = new JRXlsExporter(); exporter.setParameter(JRXlsExporterParameter.OUTPUT_FILE_NAME,????????); ........
MAIS MON FICHIER EST VIDE
Il ne fait pas le lien avec le contenu qu'il doit générer
Et maintenant,Que dois-je mettre au niveau de ce paramètre "JRXlsExporterParameter.OUTPUT_FILE_NAME" ?
REM : Peut-être que cela n'a rien avoir !
Merci
Je n'utilise pas le JRXlsExporterParameter.OUTPUT_FILE_NAME, donc toi aussi tu n'en as rien à faire
Sinon pour le fichier VIDE, il faut s'assurer qu'au niveau de iReport le même fichier Jasper s'exécute correctement et te ramène le bon résultat.
Tout à fait,
si je retire cete ligne de mon code
et que je renseigne ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 response.addHeader("Content-disposition","attachment;filename=newfile.xls");
Il me génère bien mon "testfilesrv.xls" sur le serveur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 exporter.setParameter(JRXlsExporterParameter.OUTPUT_FILE_NAME,"testfilesrv.xls");
Et ce fichier est correct, il contient bien mes données...
j'ai vu que dans ton article sur JSF ici que tu utilisait "FacesContext",
je l'ai donc ajouté à mon code
j'ai maintenant ceci comme erreur au lancement de ma page
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ... FacesContext context = FacesContext.getCurrentInstance(); response=(HttpServletResponse) context.getExternalContext().getResponse(); response.addHeader("Content-disposition","attachment;filename=t1.xls"); ...
la ligne 91 =exception
java.lang.NullPointerException
GenerateServletXLS.doGet(GenerateServletXLS.java:91)
javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
Pour info, ci-dessous la déclaration de ma Servlet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part response = (HttpServletResponse) context.getExternalContext().getResponse();
Merci pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class GenerateServletXLS extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ...
As-tu essaié d'enlever le
et laisser le :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 exporter.setParameter(JRXlsExporterParameter.OUTPUT_FILE_NAME,"testfilesrv.xls");
?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 response.addHeader("Content-disposition","attachment;filename=newfile.xls");
Normalement non,
mais j'essaye par tout les moyen d'arriver à mes fins !
Et comme je suis débutant en JAVA....
Et malgré tout je suis tj bloqué ......
Encore une chose,
au préalable j'avais programmé un rapport en PDF
et là tout est OK, il m'ouvre bien le popup, et le Rapport est correct
voici le code utilisé pour le PDF
Mais cette "méthode", je n'arrive pas à l'implémenter de cette manière pour mon fichier Excel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, con); byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint); response.setContentLength(bytes.length);response.getOutputStream().write(bytes);response.setContentType("application/pdf");
Normal : pas de "JasperExportManager.exportReportToPdf(jasperPrint)" pour Excel.
Merci pour ton aide.
Dans la doc (Javadoc de JasperReport en l'occurence), on peut voir que JasperExportManager (ligne 2 de ton code) ne propose pas de methode XLS.
Il faut visiblement se tourner vers JRXlsExporter pour faire du XLS.Façade class for exporting generated reports into more popular formats such as PDF, HTML and XML. This class contains convenience methods for exporting to only these 3 formats.
Peut être qu'en s'inspirant du code de la fonction JasperExportManager.exportReportToPdf, il n'y a pas trop de modification a faire (mais je spécule)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager