IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Télécharger un fichier PDF depuis une jsf (JBOSS)


Sujet :

JSF Java

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 43
    Points : 43
    Points
    43
    Par défaut Télécharger un fichier PDF depuis une jsf (JBOSS)
    Bonjour à tous.

    Ma question est simple... mais pénible! J'ai un pdf (une notice) à mettre à dispo aux utilisateurs via un bouton de téléchargement.

    Cela me donne ceci:
    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
    	public static void viewPdf() {
    	   String filename = "GestionBT/faces/docs/GU30282.pdf";
     
    	   // use your own method that reads file to the byte array
    	   File f = new File(filename);
    	   byte[] pdf = read(f); 
     
    	   FacesContext faces = FacesContext.getCurrentInstance();
    	   HttpServletResponse response = (HttpServletResponse) faces.getExternalContext().getResponse();
    	   response.setContentType("application/pdf");
    	   response.setContentLength(pdf.length);
    	   response.setHeader( "Content-disposition", "inline; filename=\""+filename+"\"");
    	   try {
    	       ServletOutputStream out;
    	       out = response.getOutputStream();
    	       out.write(pdf);
    	   } catch (IOException e) {
    	       e.printStackTrace();
    	   }
    	   faces.responseComplete();
    	}
    [/B]
    Chose qui fonctionne... sauf que le chemin (et celui relatif) ne fonctionnent pas! Pourquoi? Parce que si je consulte les chemins, j'obtiens ceci:
    1) E:\env_Dev\servers\jboss-4.0.3SP1\bin\GestionBT\faces\docs\GU30282.pdf
    2) GestionBT\faces\docs\GU30282.pdf
    donc on pointe dans le \bin de JBoss, et non dans le deploy de celui-ci (ce qui serait bien plus logique!).

    Etant donné que je dev sous Windows, je ne veux pas de chemin "en dur", mais est-il possible d'identifier le path de déploiement de l'appli web? (soit, là temporairement dans mon cas :
    E:\env_Dev\servers\jboss-4.0.3SP1\server\default\tmp\deploy\tmp29054GestionBT-exp.war\docs

  2. #2
    Membre averti Avatar de Shinzul
    Homme Profil pro
    Lecteur assidu de code source
    Inscrit en
    Janvier 2008
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lecteur assidu de code source
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 174
    Points : 333
    Points
    333
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ((ServletContext)FacesContext.getCurrentInstance().getExternalContext().getRealPath("/");
    Ce bout de code te renverra le chemin vers ton dossier de déploiement.

    Cela dit ce n'est pas forcement la meilleure façon de faire et il peut être plus judicieux de configurer cela via un fichier properties, la méthode que je vien de te donner faisant appel à une méthode déprécié..
    N'oubliez pas le quand vous avez votre solution.

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 43
    Points : 43
    Points
    43
    Par défaut
    Merci de ta réactivité, je teste ça immédiatement!

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 43
    Points : 43
    Points
    43
    Par défaut
    Merci! La réponse est conforme...

    Maintenant je dérive un peu sur autre chose:

    Je veux télécharger un pdf déjà existant via un simple bouton.

    J'arrive via le code suivant à télécharger... un pdf vide!
    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
    	public void viewPdf() {
    		FacesContext faces = FacesContext.getCurrentInstance();
    		String filename = Constantes.externalFacesPath() + "docs/GU30282.pdf";
    		String shortname = "GU30282.pdf";
    		logger.info(Constantes.externalFacesPath());
    		logger.info(filename);
     
    		File toto =  new File(filename);
    		if(toto.exists()) {
    			logger.info("OK");
    		} else {
    			logger.info("KO");
    		}
    		PrintWriter out = null;
    	   // use your own method that reads file to the byte array
    		try {
     
    		String sortiePDF = readFile(filename);
    		HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
    		 HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
    		 response.setHeader("Pragma", "public");
    		 response.setHeader("Expires", "0");
    		 response.setContentType("application/pdf");
    		 response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
    		 response.setHeader("Content-disposition", "attachment; filename=" + shortname + "");
    		 response.setHeader("Content-Transfer-Encoding", "binary");
    		 out = response.getWriter();
    		// Alimentation
    		out.println(sortiePDF);
     
    		faces.responseComplete();	   
    		} catch (Exception e) {
    	       e.printStackTrace();
    	   }
    	   faces.responseComplete();
    	}
    	private static String readFile(String filename) throws IOException {
    		   String lineSep = System.getProperty("line.separator");
    		   BufferedReader br = new BufferedReader(new FileReader(filename));
    		   String nextLine = "";
    		   StringBuffer sb = new StringBuffer();
    		   while ((nextLine = br.readLine()) != null) {
    		     sb.append(nextLine);
    		     sb.append(lineSep);
    		   }
    		   return sb.toString();
    		}
    NOTA le fichier est bien "lu" par le stringbuffer, aucun doute là dessus. Mais comment se fait il que je me récupère un fichier DE LA BONNE LONGUEUR (taille), mais entièrement vide???

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 43
    Points : 43
    Points
    43
    Par défaut
    Je me réponds à moi-même:
    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
    	public void viewPdf() {
    		FacesContext faces = FacesContext.getCurrentInstance();
    		String filename = Constantes.externalFacesPath() + "docs/GU30282.pdf";
    		String shortname = "GU30282.pdf";
    	   // use your own method that reads file to the byte array
    		try {
     
    		HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
    		response.setContentType("application/download");
     
    		final File file = new File(filename);
    		response.setContentLength((int) file.length());
     
    		 response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
    		 response.setHeader("Content-disposition", "attachment; filename=" + shortname + "");
    			final FileInputStream fis = new FileInputStream(file);
    			final OutputStream os = response.getOutputStream();
    			byte[] fileContent = new byte[4096];
    			int r = 0;
    			while (r >= 0) {
    				r = fis.read(fileContent);
    				os.write(fileContent);
    			}
    			os.flush();
    			os.close();
    		faces.responseComplete();	   
    		} catch (Exception e) {
    	       e.printStackTrace();
    	   }
    	   faces.responseComplete();
    	}

  6. #6
    Membre averti Avatar de Shinzul
    Homme Profil pro
    Lecteur assidu de code source
    Inscrit en
    Janvier 2008
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Lecteur assidu de code source
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 174
    Points : 333
    Points
    333
    Par défaut
    Je vais peut-être répondre a coté parce que j'ai pas trop pousser la recherche .

    Mais pour lire un fichier pdf essaye plutôt de lire directement en tableau de bytes plutôt que des String.
    N'oubliez pas le quand vous avez votre solution.

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 43
    Points : 43
    Points
    43
    Par défaut
    Pas grave Et effectivement, tu n'as pas répondu à côté

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Générer un fichier PDF depuis une application?
    Par xsmokingbenx dans le forum Android
    Réponses: 0
    Dernier message: 19/04/2011, 10h51
  2. Ouvrir un fichier pdf depuis une macro
    Par Maluje dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/03/2008, 17h51
  3. Génération de fichier PDF depuis une page html
    Par leo_ip dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/06/2007, 12h51
  4. [Stratégie] Afficher des fichiers PDF depuis une base Oracle
    Par tetram51 dans le forum Développement Web en Java
    Réponses: 3
    Dernier message: 20/12/2005, 09h15
  5. Télécharger un fichier Zip depuis une adresse internet
    Par jmjmjm dans le forum Web & réseau
    Réponses: 8
    Dernier message: 18/10/2005, 19h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo