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

JavaFX Discussion :

affichage de fichier PDF


Sujet :

JavaFX

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    mai 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2007
    Messages : 193
    Points : 144
    Points
    144
    Par défaut affichage de fichier PDF
    Bonjour,

    Débarquant du .NET, je souhaite développer ma prochaine application en Java et utiliser le JavaFX pour l'interface graphique. Pourrais-je savoir s'il existe un contrôle qui permet l'affichage de fichier PDF?
    Merci!
    Merci aussi à ceux qui ont écrit les tutos. Ils sont très clairs et permettent vraiment de bien appréhender Java.
    Paul Van Walleghem

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    août 2005
    Messages
    6 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2005
    Messages : 6 236
    Points : 22 357
    Points
    22 357
    Billets dans le blog
    48
    Par défaut
    Jamais trop tente l'affichage de fichiers PDF que ce soit en Swing ou en FX. Faudra passer par un composant externe (il y en a des payants et peut-être aussi des gratuits).
    • Voir sur StackOverflow.
    • JPedal - d'apres StackOverflow fut un temps idrsolutions avait un viewer JavaFX gratuit et un pack spé JavaFX mais la je vois rien sur leur site, faudra sans doute les contacter.
    • JavaFX PDFViewer - aucune idée de l’état d'avancement de ce projet
    • Il devrait être possible d'intéger un viewer Swing
    • Il est possible d'utiliser une lib JavaScript de visu PDF et de combiner ça avec WebView pour faire un viewer PDF web embarque dans l'app (sans besoin d'avoir une co internet).
    • [...]
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre régulier Avatar de openlowcode
    Homme Profil pro
    Développeur Java
    Inscrit en
    juin 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : juin 2019
    Messages : 36
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    pour afficher un pdf, j'utilise le "Desktop Service" de javafx ou d'AWT pour afficher le fichier avec l'application installée sur votre PC. Evidemment, ce n'est pas interactif, mais ça suffit dans la plupart des cas, et c'est évidemment fiable. Sur Open Lowcode (mon gros projet), j'ai été obligé de revenir à AWT car l'outil javafx a mal été porté sur openjdk8 (Zulu).

    Voici un example de code avec AWT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    import java.awt.Desktop;
    ...
    Desktop.getDesktop().open(defaultfile);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    import javafx.application.HostServices;
    ...
    HostServices hostservices = Client.getApplicationHostServices();
    hostservices.showDocument(defaultfile.toURI().toString());
    Il est nécessaire d'écrire le fichier sur disque avant d'utiliser les services host / desktop. Pour cela, on a parfois besoin de retrouver le répertoire temporaire de l'OS.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.getProperty("java.io.tmpdir")
    Open Lowcode Applications sur mesure, résultats rapides et à coûts réduits (repo Github)

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    mai 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2007
    Messages : 193
    Points : 144
    Points
    144
    Par défaut
    Merci de vos réponses si rapide. Elles donnent de bonnes pistes pour avancer.
    Si je comprends bien, il existe 3 frameworks pour créer l'interface graphique: le Swing, le JavaFX et l'AWT. Peuvent-elles être combinées ensemble ? Ou bien si l'on en choisit une au départ on exclut d'office les autres ?
    Pouvez-vous aussi me dire si le "Desktop Service" prend dirrectement la totalité de la fenêtre ? Ou bien, sur un même Desktop il est possible de créer des "régions" qui afficheraient chacune un PDF distinct ?
    Merci beaucoup,
    Bien cordialement.
    Paul Van Walleghem

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    11 789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 : 11 789
    Points : 27 801
    Points
    27 801
    Billets dans le blog
    2
    Par défaut
    Salut,
    Citation Envoyé par Paul Van Walleghem Voir le message
    Pouvez-vous aussi me dire si le "Desktop Service" prend dirrectement la totalité de la fenêtre ? Ou bien, sur un même Desktop il est possible de créer des "régions" qui afficheraient chacune un PDF distinct ?
    Il est plutôt difficile de prendre le contrôle ici, d'abord parce qu'il s'agit d'une application externe et qu'on ne sait pas à priori laquelle (savoir laquelle n'est pas impossible, mais comme la façon de le faire dépend de l'os, il faut se taper différents codes spécifiques si on veut avoir une application qui fonctionne partout(Window, MacOS et linux au minimum), et l'utilisateur peut choisir ce qu'il veut (un navigateur par exemple), donc ça peut dépendre de l'application aussi (et il y en a pléthore). Il y a bien des solutions en modifiant le PDF (en ajoutant du JavaScript), mais là aussi, on peut être limité par les possibilités du viewer pdf.
    Il vaut mieux choisir un affichage interne dans ton cas.

    A noter qu'en fonction de ce que tu veux faire (qualité d'affichage, interactivité voulue, etc), tu peux également opter pour une solution qui consiste à convertir le PDF en image (via PDFBox/PDFRenderer par exemple). Il y a aussi l'option de générer un pdf qui intégre les pdf que tu veux visualiser (j'ai fait ça par exemple pour afficher/imprimer un chemin de fer de journal).

    Personnellement, j'ai utilisé (y'a un moment) JPedal, pour convertir le PDF en BufferedImage, et ça marchait bien à l'époque (plus récemment, avec l'évolution du format PDF, le PDF est blanc (vide), obligeant une mise à jour). A noter que JPedal n'est pas censé être gratuit, et que sans licence, on a une croix rouge au dessus du PDF,il me semble).
    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.

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    août 2005
    Messages
    6 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2005
    Messages : 6 236
    Points : 22 357
    Points
    22 357
    Billets dans le blog
    48
    Par défaut
    Déjà on oublie AWT il n'est pas possible de le mixer dans une UI FX. Comme indiqué par joel.drigo Desktop Service se content d'invoquer la visionneuse PDF de la plateforme, idéal si on veut juste ouvrir le doc, totalement inutile si on veut intégrer l'affichage dans son UI.

    Perso je partirai plus sur une visionneuse en JavaScript intégrée dans un WebView, c'est le genre d'outil auxquels les utilisateurs sont habitués de nos jours quand ils ouvrent un PDF dans leur navigateur.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    11 789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 : 11 789
    Points : 27 801
    Points
    27 801
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par bouye Voir le message
    Perso je partirai plus sur une visionneuse en JavaScript intégrée dans un WebView
    viewerjs est top pour faire ça.
    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.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    mai 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2007
    Messages : 193
    Points : 144
    Points
    144
    Par défaut
    Super sympa la rapidité des réponses!
    Je vais oublier le Desktop, cela me parait une solution trop complexe pour mes objectifs.
    Mon but est d'avoir une très bonne qualité de l'image, peu importe la taille de l'écran...
    C'est d'ailleurs pour ça que je me dirige vers du PDF.
    Joel, quand vous parlez de convertir un PDF en image, parlez-vous bien d'image temporaire qui serait générée à chaque affichage du document ? J'y avais pensé aussi, mais je ne savais pas si c'était réalisable...
    En fait je dois afficher le paragraphe d'un poème qui a été traduit en différentes langues. Si j'ai choisi, à priori , de travailler avec des PDF c'est pour avoir un format vectorisé. D'après les quelques articles que j'ai lu au sujet de Java , il ne sait afficher que des images au format BitMap ( comme un tas d'autres langages)
    A plus !
    Paul Van Walleghem

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    11 789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 : 11 789
    Points : 27 801
    Points
    27 801
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Paul Van Walleghem Voir le message
    Joel, quand vous parlez de convertir un PDF en image, parlez-vous bien d'image temporaire qui serait générée à chaque affichage du document ? J'y avais pensé aussi, mais je ne savais pas si c'était réalisable...
    Oui, c'est le cas. Un cas pratique que j'ai mis en place, c'est un pageflip : je convertis le pdf en image et quand l'utilisateur zoom ou dézoom je reconvertis l'image dans la nouvelle échelle, ce qui me permet de maximiser la qualité. Bien sûr, pour des raisons de mémoire, je limite quand même la résolution.

    Citation Envoyé par Paul Van Walleghem Voir le message
    En fait je dois afficher le paragraphe d'un poème qui a été traduit en différentes langues. Si j'ai choisi, à priori , de travailler avec des PDF c'est pour avoir un format vectorisé. D'après les quelques articles que j'ai lu au sujet de Java , il ne sait afficher que des images au format BitMap ( comme un tas d'autres langages)
    En fait, non, Java, en AWT/Swing, SWT/JFace/Draw2D, et je suppose JavaFX (je n'ai jamais trop codé d'UI JavaFx, mais il n'y a pas de raison que ça ne soit pas possible), on peut afficher du vectoriel sans souci.
    Générer du PDF juste pour afficher des images vectorisées pour les afficher en Java, c'est vraiment se compliquer la vie.
    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.

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    août 2005
    Messages
    6 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2005
    Messages : 6 236
    Points : 22 357
    Points
    22 357
    Billets dans le blog
    48
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    En fait, non, Java, en AWT/Swing,
    Et Java2D sur lequel reposent AWT/Swing... oui... et non en fait. La rasterisation est bien plus présente et proche de la couche utilisateur dans Java2D en fait. Et des qu'on manipule le Graphics d'une BufferedImage (donc quand on fait du double-buffering par exemple ou pas mal d'effet graphiques avances comme le flou ou la transparence), y a un Raster qui traîne pas loin derrière.

    En FX y a du bitmap aussi mais c'est moins directement accessible au programmeur.

    Après tu me diras, a part des primitives simple de dessin de rendu de formes genre rectangle ou cercles (et encore quand l'affichage est trop chiade ca passe pu) de toute manière on passe presque tout le temps par de la rasterisation a un moment ou a un autre.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    11 789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 : 11 789
    Points : 27 801
    Points
    27 801
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par bouye Voir le message
    de toute manière on passe presque tout le temps par de la rasterisation a un moment ou a un autre.
    Oui, bien sûr, d'autant plus qu'au final, la mémoire vidéo est bitmap. Ce que je voulais dire c'est qu'on a à disposition une API vectorielle combinée à des fonctions comme l'antialiasage qui nous permet de dessiner directement en vectoriel avec une qualité graphique tout à fait équivalente/identique à ce qu'on peut faire en PDF.
    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.

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    mai 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mai 2007
    Messages : 193
    Points : 144
    Points
    144
    Par défaut
    Encore merci de vos conseils. C'est super sympa
    Paul Van Walleghem

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

Discussions similaires

  1. Affichage de fichier PDF situé sur un serveur distant
    Par fessebleu dans le forum Langage
    Réponses: 1
    Dernier message: 24/04/2014, 16h23
  2. probleme avec l'affichage des fichier pdf dans webBrowser
    Par mounir01 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 21/11/2013, 11h34
  3. [GWT2.3] Affichage de fichier PDF
    Par valkeke dans le forum GWT et Vaadin
    Réponses: 6
    Dernier message: 29/09/2012, 10h05
  4. Affichage des fichier pdf ou doc sur ma page
    Par scaryfan dans le forum JSF
    Réponses: 4
    Dernier message: 25/09/2009, 13h54
  5. Affichage miniature fichier PDF
    Par Mytå_Qc dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/09/2008, 23h28

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