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

Servlets/JSP Java Discussion :

Source de l'Image avec iText


Sujet :

Servlets/JSP Java

  1. #1
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2005
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 246
    Points : 159
    Points
    159
    Par défaut Source de l'Image avec iText
    Bonjour,

    J'ai généré un PDF avec iTEXT en l'incorporant une image. Je travaille sur un projet JSP/Servlets. Je rencontre des problèmes avec l'emplacement de mon image. Je voulais un chemin relatif, mais le système utilise un chemin absolu à partir de c:\.
    Voici le code d'erreur affiché.

    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
    com.itextpdf.io.IOException: I/O exception.
    	com.itextpdf.io.image.ImageDataFactory.readImageType(ImageDataFactory.java:503)
    	com.itextpdf.io.image.ImageDataFactory.createImageInstance(ImageDataFactory.java:420)
    	com.itextpdf.io.image.ImageDataFactory.create(ImageDataFactory.java:84)
    	..................
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    
    
    cause mère
    java.io.FileNotFoundException: C:\eclipse\logopades.png (Le fichier spécifié est introuvable)
    	java.io.FileInputStream.open0(Native Method)
    	java.io.FileInputStream.open(Unknown Source)
    	java.io.FileInputStream.<init>(Unknown Source)
    	java.io.FileInputStream.<init>(Unknown Source)
    	sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
    	sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)
    	java.net.URL.openStream(Unknown Source)
    	com.itextpdf.io.util.UrlUtil.openStream(UrlUtil.java:82)
    	com.itextpdf.io.image.ImageDataFactory.readImageType(ImageDataFactory.java:498)
    	com.itextpdf.io.image.ImageDataFactory.createImageInstance(ImageDataFactory.java:420)
    	com.itextpdf.io.image.ImageDataFactory.create(ImageDataFactory.java:84)
    	com.itextpdf.io.image.ImageDataFactory.create(ImageDataFactory.java:92)
    	com.itextpdf.io.image.ImageDataFactory.create(ImageDataFactory.java:96)
    	beans.PDFClasse.creerEntete(PDFClasse.java:71)
    	beans.PDFClasse.createPdfMarche(PDFClasse.java:296)
    	servlets.MarchePDF.doGet(MarchePDF.java:54)
    	servlets.MarchePDF.doPost(MarchePDF.java:71)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    Comme vous pouvez constater, il cherche toujours dans le répertoire eclipse.
    Je voudrais qu'il cherche dans le répertoire courant, sinon dans le dossier de mon projet.

    Voici le code concerné

    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
     
    public class PDFClasse {
    	public static final String DOG = "logopades.png";
     
    	public PDFClasse() { 
     
    	}
     
    	public Table creerEntete() throws IOException, SQLException{
                  ..........................
                  ................................
     
            Image dog = new Image(ImageDataFactory.create(DOG));
     
            entete.addCell(gauche.add(dog));
            entete.addCell(droite.add(" "));
    		return entete;
    	}
    Merci d'avance pour l'attention accordée à ce message.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par demcoul Voir le message
    Bonjour,

    J'ai généré un PDF avec iTEXT en l'incorporant une image. Je travaille sur un projet JSP/Servlets. Je rencontre des problèmes avec l'emplacement de mon image. Je voulais un chemin relatif, mais le système utilise un chemin absolu à partir de c:\.
    Relatif par rapport à quoi? Là il est relatif par rapport au dossier courant, ce qui ne veux rien dire dans le cadre d'une servlet.

  3. #3
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2005
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 246
    Points : 159
    Points
    159
    Par défaut
    Bonjour,

    Je voulais que iTEXT accepte de prendre l'image dans un sous-dossier du dossier courant.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    dans le cadre d'un servlet le "dossier courant" ne veux rien dire puisque c'est le dossier courant de ton conteneur J2EE dont la valeur est indéterminée.

    tu dois decider d'où tu va mettre ton image (dans le classpath? de le '/' de ton war?) et ensuite en fonction d'où tu compte le mettre on peux regarder à adapter le code. Dans tous les cas, tu oublie les fichiers d'une servlet. la notion de fichier n'y existe plus. Tu vas devoir passer par les api de iText n'utilisant que des inputstreams.

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    dans le cadre d'un servlet le "dossier courant" ne veux rien dire puisque c'est le dossier courant de ton conteneur J2EE dont la valeur est indéterminée.
    Ce n'est pas tout à fait vrai, il peut certes varier en fonction du type de déploiement (war, ear) mais le chemin physique de base de la servlet peut facilement être récupéré via HttpServletRequest.
    Dans une méthode de servlet comme "service" ce serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
    public void service(HttpServletRequest request, HttpServletResponse response) throws...
    {
       String basePath = request.getServletContext().getRealPath("/");
     
       // Donc basePath correspond au chemin physique de "WebContent" de l'application.
    }
    Pour avoir le chemin physique d'un sous-répertoire, il suffit de rajouter à basePath,
    Exemple :
    basePath += "/WEB-INF/resources/images/monImage.png";

    Ensuite, il suffit de passer ce chemin à iText qui pourra traiter correctement l'image

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    ouais enfin tu n'a pas de garantie que getRealPath te renvoie autre chose que null. Et si tu passe par la servlet context, autant directement lui demander l'inputStream

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Euh... avec getRealPath("/") tu n'as aucune chance qu'il te renvoie null ou alors il faudra m'expliquer comment une servlet active peut ne pas matérialiser son chemin de base

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    rien n'oblige un conteneur J2EE d'exploser le WAR, par exemple. Et donc le "real path" n'existe pas. Je ne connais pas l'état des conteneurs à l'heure actuelle, mais pas le passé, il existait bien des conteneurs qui renvoyaient null. Weblogic par exemple. Et c'est conforme à la spec puisqu'elle dit jusque que 'si le conteneur peu pas il retourne null', elle ne définis pas à ma connaissance les conditions de "peut pas".

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

Discussions similaires

  1. WPF - Source d'une image avec chemin relatif
    Par Bernardtapis dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 01/10/2009, 14h37
  2. [Source]Tatoueur d'image avec Tkinter et PIl
    Par vincent.mbg dans le forum Contribuez
    Réponses: 5
    Dernier message: 11/09/2009, 10h35
  3. changer la source d'une image avec Firefox
    Par couetbis dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 07/11/2007, 22h45
  4. Pb avec code source "lister les images d'un dossier"
    Par Mimisator dans le forum Langage
    Réponses: 2
    Dernier message: 19/10/2005, 15h25
  5. Economie de mémoire pour plusieur images avec la même source
    Par neness dans le forum Composants VCL
    Réponses: 5
    Dernier message: 18/01/2004, 10h56

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