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

Interfaces Graphiques en Java Discussion :

Un browser embarqué lisant les PDF


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : août 2016
    Messages : 18
    Points : 16
    Points
    16
    Par défaut Un browser embarqué lisant les PDF
    Bonjour à tous,
    Ce post est la suite du post https://www.developpez.net/forums/d2...fichier-local/ .
    Je suis toujours sur mon projet de faire un écran de veille qui affiche un site internet.
    Petite modification cependant, j'ai réussi à faire en sorte que je n'appel plus un fichier local incluant un script et d'autres infos mais j'appel une page du style "www.toto.com/id", donc plus de problème de cookie en local.
    Tout va pour le mieux dans le meilleur des mondes jusqu'à ce que je navigue sur les différents spots de pub envoyés : une vidéo se lance pour chaque page (pas de problème) et certains spots inclus des boutons pour visualiser notamment les mentions légales. Or, cette page affiche juste un document PDF dans un iframe je pense.

    Mon problème est que le WebView de JavaFx ne possède pas de module PDF et je n'ai rien trouvé sur comment lui en ajouter un.
    J'ai trouvé comment afficher un document PDF via PDF.js mais il me semble que cela ne peut se faire que si on mets à dispo une page, pas quand on l'appel :
    -si je mets à dispo une page a.html qui embarque un pdf, je peux choisir d'afficher ce document via le reader en js.
    -par contre, si j'appel une adresse mais que le créateur n'a rien fait de spécial, il n'y a pas moyen de signaler au browser d'utiliser ce reader.

    Bref je suis encore une fois bloqué avec cette fonctionnalité et je commence à penser que créateur d'écran de veille est un vrai métier.
    Au secours !!!

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    12 352
    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 : 12 352
    Points : 29 251
    Points
    29 251
    Billets dans le blog
    2
    Par défaut
    Salut,


    Tu pourrais simplement, comme tu as fait pour ton mini serveur web pour les pages locale, faire un proxy, ou utiliser ce serveur web, pour transformer les liens vers pdf en une page qui affiche le pdf via pdf.js, ou patcher les liens.

    Il me semble que viewerjs le fait tout seul, en modifiant juste le lien (on ne passe pas par du js pour ouvrir le pdf). Il te suffirait donc de patcher les href <a> (par un script dans la page, ou en Java dans le proxy via JSoup).
    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
    Membre extrêmement actif Avatar de ddoumeche
    Homme Profil pro
    Ingénieur recherche et développement
    Inscrit en
    octobre 2007
    Messages
    1 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Singapour

    Informations professionnelles :
    Activité : Ingénieur recherche et développement

    Informations forums :
    Inscription : octobre 2007
    Messages : 1 261
    Points : 2 250
    Points
    2 250
    Par défaut
    Bonjour,

    il faut éventuellement considérer l'utilisation d'un vrai client web comme moteur de rendu dans ton application, comme Chromium si les suggestions précédentes ne marchent pas.
    https://medium.com/@daniel.bischoff/...f-72f67a677db6

    Cordialement
    La joie de l'âme est dans la planification -- Louis Hubert Liautey

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    août 2005
    Messages
    6 381
    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 381
    Points : 22 902
    Points
    22 902
    Billets dans le blog
    49
    Par défaut
    Voir Displaying pdf in JavaFX sur StackOverflow qui offre divers solutions dont une reposant sur pdf.js.

    EDIT - si on extrait le contenu de la distribution du viewer dans un package webview.pdf (sans modifier l'arborescence du contenu), on peut charger la visionneuse avec le PDF d'exemple fourni via le code suivant :

    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
    package webview.pdf;
     
    import javafx.application.Application;
    import javafx.application.Platform;
    import javafx.scene.Scene;
    import javafx.scene.layout.StackPane;
    import javafx.scene.web.WebView;
    import javafx.stage.Stage;
     
    import java.net.URL;
    import java.util.Optional;
     
    public final class Main extends Application {
        public static void main(String... args) {
            launch(args);
        }
     
        private WebView webView;
     
        @Override
        public void start(final Stage stage) throws Exception {
            webView = new WebView();
            final var root = new StackPane(webView);
            root.setPrefSize(600, 600);
            final var scene = new Scene(root);
            stage.setTitle("Test");
            stage.setScene(scene);
            stage.show();
            Platform.runLater(this::loadViewer);
        }
     
        private void loadViewer() {
            Optional.ofNullable(getClass().getResource("web/viewer.html"))
                    .map(URL::toExternalForm)
                    .ifPresent(webView.getEngine()::load);
        }
    }
    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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : août 2016
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    Bon déjà désolé de ne pas vous avoir répondu mais j'ai été très occupé ces derniers temps.
    Merci pour vos trois réponses.

    @joel.drigo Ta solution me semble correcte en théorie. Par contre, pour la mettre en pratique, ça me semble complexe : jamais fait de proxy et je ne maîtrise pas vraiment ce fonctionnement.

    @ddoumeche J'y ai déjà pensé et j'ai réussi à intégrer Chromium en remplacement de WebView. Par contre, rien ne fonctionne sauf les PDF : les vidéos ne se lisent pas, les liens sont cassés ... Ce n'est pas vraiment plus efficace du coup ^^. De plus, JCEF (de mémoire c'est bien celui-là que j'ai intégré) est extrêmement compliqué à mettre en place.

    @bouye La solution me parait OK mais il y a un problème : le runlater charge le loader après le chargement de la page. Or cette dernière ne contient pas forcément des PDF, c'est bien ça le problème. Donc au chargement, à la place d'une vidéo, j'ai un loader pdf vide ^^.

    Bon je chipote car en fait, ce qu'il me faut c'est un mixe des solutions de joel.drigo et de bouye : interpréter le code de la page pour trapper le chargement d'un PDF et intégrer le viewer.html à la place. Pour ce faire, je vais regarder du coté des proxy comme indiqué plus haut. Je vais tacher de trouver des tutos et si je n'y arrive pas, je regarderais avec les evenements du genre VIEWER_NOT_FOUND ou autre.

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    12 352
    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 : 12 352
    Points : 29 251
    Points
    29 251
    Billets dans le blog
    2
    Par défaut
    Quand je parle de proxy, c'est simplement un serveur intermédiaire par lequel toutes tes requêtes locales vont passer, ce qui va te permettre d'en patcher le contenu.
    Au lieu d'attaquer une url directement, elle passe par cette application qui va faire la requête réelle (appeler l'URL réelle) récupérer le résultat, le parser, le patcher et l'envoyer en réponse de la requête du navigateur. Ce qui veut dire évidemment en théorie de patcher tous les "chemins" : url dans le html, dans les headers, les css, etc, pour que le navigateur passe toujours par le proxy, pour que tout soit patché. Mais tu peux procéder partiellement : le but c'est surtout d'intercepter du html qui contient des balise <a> qui contiennent des liens vers des pdf, de manière à quand on clicke sur le lien dans le navigateur, ou qu'il y ait un traitement qui provoque le lancement de ce lien, ça affiche un viewer.js au lieu de passer par le renderer natif du navigateur.

    Mais il y a peut être une solution beaucoup plus simple, mais non Java : faire un plugin pour le navigateur qui fait cette interception dans le navigateur, à la source, pour rediriger les requêtes directes de pdf vers une page qui prend une url de pdf en paramètre et appel pdf.js ou viewer.js au choix. C'est un domaine que je connais que vaguement mais ça doit être possible.
    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.

Discussions similaires

  1. [FPDF] Sauvegarder les pdfs générés dans un répértoire
    Par houdazcom dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 12/08/2009, 19h16
  2. Properties embarquées dans les artifacts
    Par Saloucious dans le forum Maven
    Réponses: 0
    Dernier message: 14/11/2007, 17h41
  3. Convertir les fichers Excel en pdf et imprimer les pdf
    Par nautygirl dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/10/2007, 20h28
  4. Reports des erreurs dans les PDF
    Par Arnaud F. dans le forum Traduction LDD3
    Réponses: 0
    Dernier message: 20/07/2007, 23h49

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