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

Documents Java Discussion :

Afficher un fichier pdf distant (pdf-renderer)


Sujet :

Documents Java

  1. #1
    Nouveau membre du Club Avatar de sampyi
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Par défaut Afficher un fichier pdf distant (pdf-renderer)
    Bonjour, j'essaye d'afficher le contenu d'un fichier pdf dans une JFrame de mon programme java avec l'api "Pdf-renderer", voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    URI uri = null;
    try{
        uri = new URI("file://192.168.0.21/fichier.pdf");
    }catch(URISyntaxException e){
        e.printStackTrace();
    }
    new BookReader(uri);

    mais j'obtiens cette erreur: "URI has an authority component" et je ne sais pas comment la résoudre. La variable uri est utilisé dans un objet File.
    J'arrive à ouvrir mon fichier pdf en local avec un "new File("fichier.pdf")" mais depuis un serveur je n'y arrive pas.

    Pouvez-vous m'aider ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il est partagé comment le fichier ? Parce que si c'est sur un serveur http (ou https), l'URL sera du type "http://authority component/path", donc "http://192.168.0.21/fichier.pdf" (ou https://192.168...") pour ton cas. Si c'est un partage CIFS (ou smb), il faudra utiliser soit le protocole file: suivi de même chemin que tu utiliserais sous ton explorer ou dans le shell (dépend de l'os, et du type montage), soit, de préférence, une bibliothèque dédiée, comme JICFS. Idem si c'est du FTP, du NTS ou autre protocole non nativement supporté par Java : utiliser une bibliothèque adaptée (ou écrire un URLStreamHandler éventuellement, fondé éventuellement sur une de ces bibliothèque, pour utiliser l'accès par URL).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Nouveau membre du Club Avatar de sampyi
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Par défaut
    Salut, mon fichier est stocké sur un serveur wamp donc c'est un serveur http il me semble, si je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File file = new File("http://192.168.0.21/fichier.pdf");
    j'ai cette erreur: "java.io.FileNotFoundException: http:\192.168.0.21\fichier.pdf (The filename, directory name, or volume label syntax is incorrect)" et si je passe par une URI, j'ai cette erreur: "java.lang.IllegalArgumentException: URI scheme is not "file"".

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Je t'ai dit de changer le protocole, pas la classe. Cette notation, c'est bien une notation d'URL, donc il faut utiliser la classe URL (ou URI si le constructeur de BookReader prend de l'URI, sauf cas particulier, ça passera). File c'est pour les fichiers locaux (filesystem).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try{
        URL url = new URL("http://192.168.0.21/fichier.pdf");
        new BookReader(url);
    }catch(URISyntaxException e){
        e.printStackTrace();
    }
    Si la classe BookReader prend de l'URI (et que tu ne peux pas changer ça), utilise URI au lieu de URL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try{
        URI uri = new URI("http://192.168.0.21/fichier.pdf");
        new BookReader(uri);
    }catch(URISyntaxException e){
        e.printStackTrace();
    }

    Si ça plante au niveau parsing (il y'a des légères différences), tu peux construire une URL et la transformer en URI :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try{
        URL url = new URL("http://192.168.0.21/fichier.pdf");
        new BookReader(url.toURI());
    }catch(URISyntaxException e){
        e.printStackTrace();
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Nouveau membre du Club Avatar de sampyi
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Par défaut
    Enfaite la classe BookReader est une classe que j'ai faite et voici la partie qui a besoin de l'accés au fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PDFFile pdffile = null;
    try{
        File file = new File(url);
        RandomAccessFile raf = new RandomAccessFile(file, "r");
        FileChannel channel = raf.getChannel();
        ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
        pdffile = new PDFFile(buf);
    }catch(IOException e1){
        e1.printStackTrace();
    }
    Ducoup en essayant les codes que tu as écris ça ne fonctionne pas, et pour ouvrir le fichier je dois passer par un objet File.

    Edit: En essayant de comprendre comment l'objet PDFFile fonctionnait j'ai vu qu'il prenait en paramètre un ByteBuffer donc j'ai cherché pour transformer une URL en ByteBuffer, et ça fonctionne avec ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    URL uri = new URL("http://192.168.0.21/fichier23.pdf");
    InputStream stream = uri.openConnection().getInputStream();
    byte[] byt = IOUtils.toByteArray(stream);
    ByteBuffer buf = ByteBuffer.wrap(byt);
    pdffile = new PDFFile(buf);
    En tout cas merci beaucoup pour ton aide, j'ai pu apprendre et comprendre certaines choses

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Bah, forcément, si tu as fait une méthode qui ne traite que les File, pas de risque que tu puisses charger un PDF depuis une URL... (d'un autre côté, c'est un peu naze cette classe qui prend un ByteBuffer en entrée)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static ByteBuffer getFrom(URL url) throws IOException {
    	    URLConnection connection = url.openConnection();
    	    try(BufferedInputStream in = new BufferedInputStream(connection.getInputStream(),512)) {
    		int contentLength = connection.getContentLength();
    		int size = (contentLength==-1?16384:contentLength);
    	    	try(ByteArrayOutputStream out = new ByteArrayOutputStream(size)) {
    	    		int read;
    	    		while( (read=in.read())!=-1 ) {
    	    			out.write(read);
    	    		}
    	    	    return ByteBuffer.wrap(out.toByteArray());
    	   	}
         } 
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Afficher un fichier PDF local sur un serveur distant
    Par keumlebarbare dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 02/11/2009, 22h08
  2. [VB.Net] afficher un fichier pdf dans une page WEB
    Par kasaw dans le forum ASP.NET
    Réponses: 3
    Dernier message: 25/08/2008, 16h02
  3. [Firefox] Impossible d'afficher un fichier XML distant
    Par jamidoquai dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 04/12/2006, 13h56
  4. [FPDF] Cherche informations pour afficher un fichier pdf avec PHP
    Par Hans_B dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 22/03/2006, 11h57
  5. [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

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