[Servlet]Ouverture d'un fichier non HTML

Ouverture d'un fichier non HTML [Servlet] - Java - Programmation

Marsh Posté le 10-06-2004 à 11:06:36    

Salut,  
Pour générer du pdf facilement, j'utilise l'API Itext qui fonctionne plutôt bien. J'ai vu que certains l'avaient utilisée ici, donc peut être pourra t-on me répondre, je ne suis pas sûr d'ailleurs que mon problème soit directement lié à l'utilisation de cette API.
 
Voici le corps la méthode doPost de la servlet qui doit générer le pdf :  
 

Code :
  1. response.setContentType("application/pdf" );
  2. response.setHeader("Content-disposition","attachment; filename=test.pdf" );
  3. Document document = new Document();
  4. try {
  5.   //ContentType and create an instance of the corresponding Writer  
  6.   PdfWriter.getInstance(document, response.getOutputStream());
  7.   document.open();
  8.   document.add(new Paragraph(new Date().toString()));
  9. }
  10. catch(DocumentException de) {
  11.   de.printStackTrace();
  12.   System.err.println("document: " + de.getMessage());
  13. }
  14. document.close();


 
Code trouvé sur le site du créateur de l'API : http://www.lowagie.com/iText/examples/Chap0105.java
Le problème :  
- tout d'abord une nouvelle fenêtre du navigateur s'ouvre avec l'URL de la servlet.  
- Ensuite boîte de dialogue voulez vous ouvrir/enregistrer le fichier "NomServlet" et nom pas "test.pdf".  
Si je clique sur energister, ça marche à peu près, il m'enegistre bien un "test.pdf".  
Si je clique sur ouvrir : deuxième boite de dialogue (enfin) voulez vous ouvrir/enregistrer le fichier "test.pdf". Enregistrer passe. Mais ouvrir plante, il me dit que le fichier n'existe pas....  
 
 
D'où les questions :  
1) Comment faire pour ne pas avoir une nouvelle instance de navigateur qui s'ouvre (j'ai mis un target="_blank" dans ma jsp, mais je ne sais pas quoi mettre)  
2) Je voudrai directement la bonne fenêtre : voulez vous ouvrir/enregistrer le fichier "test.pdf"  
 
Any Help please ...
_________________
show time !!!


Message édité par The Flint le 10-06-2004 à 11:09:08

---------------
Krikazaaak
Reply

Marsh Posté le 10-06-2004 à 11:06:36   

Reply

Marsh Posté le 10-06-2004 à 14:55:32    

Reply

Marsh Posté le 10-06-2004 à 16:03:26    

Oui, mais j'interviens justement sur ce post aussi.
Il n'y pas de solution de trouvée pour le moment.
 
Donc [:phlos]


---------------
Krikazaaak
Reply

Marsh Posté le 10-06-2004 à 17:04:06    

The Flint a écrit :

Enregistrer passe. Mais ouvrir plante, il me dit que le fichier n'existe pas....  


 
Ce qui est vrai puisque le fichier est généré à la volée !!!

Reply

Marsh Posté le 11-06-2004 à 08:52:00    

pascal34 a écrit :

Ce qui est vrai puisque le fichier est généré à la volée !!!


 
Umf  :heink:  :heink:  
mais non, ça marche en fait très bien avec Mozilla, mais pas avec IE.
Le fichier est quand même généré avant d'être ouvert donc il existe.


---------------
Krikazaaak
Reply

Marsh Posté le 11-06-2004 à 09:38:48    

Ca sent le bug IE !!!
Ca ne fera jamais qu'un de plus.

Reply

Marsh Posté le 11-06-2004 à 09:45:40    

Bah ouais. c'est pas que ça me gène profondément, mais comme c'est une appli pro et que 95% des gens utilisent IE je préfererai que ça fonctionne sous IE même si ça ne doit pas fonctionner avec mozilla.


---------------
Krikazaaak
Reply

Marsh Posté le 11-06-2004 à 10:01:50    

Maintenant, tu devrais pouvoir imposer d'avoir IE 5.5 minimum.
Ca merde pour toutes les versions ?

Reply

Marsh Posté le 11-06-2004 à 10:15:47    

IE 6.0 malheureusement.
Je doute que ce soit mieux avec une version antérieure.


---------------
Krikazaaak
Reply

Marsh Posté le 11-06-2004 à 10:38:53    

Essaie de faire générer un simple fichier texte (type mime: text/plain je crois) par ta servlet et vois comment se comporte IE

Reply

Marsh Posté le 11-06-2004 à 10:38:53   

Reply

Marsh Posté le 11-06-2004 à 10:44:25    

C'est une idée...
je vais essayer.


---------------
Krikazaaak
Reply

Marsh Posté le 11-06-2004 à 13:24:19    

Personellement j'ai eu me même genre de problème avec IE.
Dans mon cas, on ouvre un fichier pdf généré à la volée dasn une nouvelle fenêtre.
 
Le souci venait du fait que on passait deux fois dans la fonction qui nous ouvre le fichier et l'affiche. Je suppose que c'etais une fois pour la servelet et une fois pour le fichier en lui même.
 
On a résolu le pb en ajoutant :
 
        response.setHeader("Cache-Control", "" );
        response.setHeader("Pragma", "" );
        response.setHeader("Expires", "" );
 
Depuis plus de pb avec IE, et ca fonctionne toujours correctement avec Mozilla.
 
J'espere que cela va pouvoir vous aider.

Reply

Marsh Posté le 11-06-2004 à 13:45:39    

Légère amélioration avec ce code ajouté.
Il m'ouvre toujours deux fenêtre successives, mais si je fais deux fois ouvrir, cette fois ci, le fichier s'ouvre sans encombres.
Donc merci beaucoup, plus que le prblème de la double fenêtre à régler (une première avec le nom de la servlet, et une deuxième avec le nom du fichier).


---------------
Krikazaaak
Reply

Marsh Posté le 11-06-2004 à 14:04:31    

Personnelement, j'écris directement le fichier dans la variable "response" de cette manière :
 
response.getOutputStream().write(array);
 
ou array est un tableau de byte, et response est du type HttpServletResponse.
 
Maintenant je ne sais absolment pas si ca permet de sauvegarder le fichier ou si ca va l'ouvrir dans le navigateur.
 

Reply

Marsh Posté le 11-06-2004 à 14:06:26    

Bysounours a écrit :

Personnelement, j'écris directement le fichier dans la variable "response" de cette manière :
 
response.getOutputStream().write(array);
 
ou array est un tableau de byte, et response est du type HttpServletResponse.
 
Maintenant je ne sais absolment pas si ca permet de sauvegarder le fichier ou si ca va l'ouvrir dans le navigateur.


 
Ok pour ça, je fais à peu près ça.
Mais tu finis ton code comment ? Tu fermes l'outpustream, tu le flush???


---------------
Krikazaaak
Reply

Marsh Posté le 11-06-2004 à 14:11:02    

juste un close, je fais pas de flush.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed