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

Qt Discussion :

Bientôt un module de lecture de PDF dans Qt ?


Sujet :

Qt

  1. #1
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 585
    Points
    188 585
    Par défaut Bientôt un module de lecture de PDF dans Qt ?
    Jusqu’à présent, avec Qt, si l’on voulait afficher un fichier PDF, le choix principal est Poppler, MuPDF étant aussi utilisé, mais sans facilité pour Qt Quick. Certains aventureux utilisent Qt WebEngine et pdf.js, la bibliothèque qu’utilise Firefox pour afficher les PDF. La situation pourrait changer : pendant un précédent hackathon, des développeurs de Qt ont écrit une petite couche d’intégration avec PDFium, le moteur d’affichage de PDF de Chromium. L’avantage principal par rapport à Poppler et MuPDF est la licence : PDFium est sous licence BSD, Poppler GPL et MuPDF AGPL.

    Ce module expérimental a été récemment retravaillé et mis sous licence LGPL 3, pour être utilisable par le plus grand nombre. Il comporte principalement deux classes : QPdfDocument, qui permet d’afficher une page dans une QImage, ainsi que QPdfBookmarkModel, qui donne accès aux marque-pages. Une couche d’accès pour Qt Quick est dans les projets (considérer un PDF comme une image comme les autres — à l’exception cependant des pages multiples, fonctionnalité plus rare pour des formats d’images traditionnels), mais sans date certaine.



    Voir les sources de Qt PDF.
    Source : New QtLabs PDF module.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  2. #2
    Membre émérite
    Profil pro
    retraité
    Inscrit en
    Décembre 2010
    Messages
    806
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 806
    Points : 2 307
    Points
    2 307
    Par défaut Bizarre la licence
    Bonsoir,
    en fait ils prennent un code BSD, le modifie, et mettent une partie en commercial et LGPL. Ils ont le droit de faire cela ? je veux dire en commercial c'est ok, en BSD aussi mais restreindre un truc qui a la base est en BSD pour le mettre en LGPL.
    Si quelqu'un peut m'expliquer la moralité du truc.
    Bonne soirée

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Août 2008
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 238
    Points : 620
    Points
    620
    Par défaut
    Moralité n'est pas légalité.
    Mais ce n'est pas sur la terrain de le moralité que l'on se situe ici. Parler de moralité en matière de justice, c'est impropre.
    C'est le mot équité qu'il est approprié. Autrement dit, la question à se poser est : "Y-a-t'il un préjudice, un abus ?"

    Je n'en vois pas. Il existe une bib PDF en C++ sous licence BSD. Elle est adaptée pour Qt et commercialisée et éditée sous licence LGPL.

    Les faits, ce sont les développements qui constituent la valeur-ajoutée et sont propriétaires. Le code source d'origine n'est pas confisqué.
    La liberté de chacun de réaliser un développement similaire est intacte.

    Aucune préjudice pour personne :
    - la licence BSD est respectée. Elle est à ce propos, compatible avec GPL.
    - la liberté des utilisateurs d'utiliser et modifier est préservée.

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 585
    Points
    188 585
    Par défaut
    De ce que j'ai vu, ils ne reprennent pas le code de PDFium, ils construisent une couche d'abstraction par-dessus — PDFium étant utilisé comme bibliothèque. Si mes souvenirs sont bons, selon la GPL, c'est toujours un travail dérivé (donc à distribuer sous GPL, une licence "libre") ; par contre, d'un point de vue moral, ça me semble justifiable, sans problème.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,
    Citation Envoyé par archqt Voir le message
    Bonsoir,
    en fait ils prennent un code BSD, le modifie, et mettent une partie en commercial et LGPL. Ils ont le droit de faire cela ? je veux dire en commercial c'est ok, en BSD aussi mais restreindre un truc qui a la base est en BSD pour le mettre en LGPL.
    Si quelqu'un peut m'expliquer la moralité du truc.
    Bonne soirée
    Je viens de relire le texte de la licence BSD (on le trouve, entre autres -->ICI<<-- ) et elle est très claire : tu en fais du truc sous BSD (la bibliothèque, en l'occurrence) strictement ce que tu veux. La seule restriction est que la notice concernant la licence (de la bibliothèque que tu utilise) doit l'accompagner "partout ou elle ira"

    Tu voudrais même l'utiliser -- sous quelle que forme que ce soit -- pour une application vendue à 10000$ pièce, c'est ton droit le plus stricte du point de vue légal

    On peut se poser la question de savoir si c'est "sympa" ou "moral" de le faire, surtout si une grande partie de ton projet est basé exclusivement sur des trucs sous licence BSD, mais, si ca ne t'empêche pas de dormir la nuit, c'est en tout cas suffisamment sympa et moral pour que tu puisse "faire avec", et c'est tout ce qui compte en définitive
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Côté moral, je ne vois pas exactement (même si je sais) pourquoi cela entre en compte. J'estime que celui qui fait le projet/bibliothèque choisit la licence en connaissance de cause (car oui, le choix de la licence est important et ne doit pas se faire n'importe comment, même si nous ne sommes pas tous des juristes). Du coup, le choix de la BSD est :
    • je veux que mon projet soit utile pour tous (et réutilisé) (même si c'est commercial) ;
    • je veux tout de même une reconnaissance, même minime de mon travail (fichier de licence).

    C'est comme ça, que je résumerai (même si c'est un peu hatif).
    Du coup, ce n'est pas à nous, membres externes du projet de dire : "ce n'est pas moral". Car finalement, c'est l'auteur qui a choisit que ce soit ainsi (altruisme ).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre émérite
    Profil pro
    retraité
    Inscrit en
    Décembre 2010
    Messages
    806
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2010
    Messages : 806
    Points : 2 307
    Points
    2 307
    Par défaut
    Bonjour,
    qu'ils fassent du commercial avec du code en licence BSD je suis d'accord MAIS qu'ils laissent le nouveau code en BSD. La ils le mettent en commercial + LGPL. Donc pour celui qui veut faire du commercial c'est plus compliqué quelque part, même si c'est faisable avec une liaison statique sans fournir le code.
    Ils auraient pu le laisser en licence BSD, même s'ils ont le droit de le faire.
    Bonne fin de journée

  8. #8
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Je peux me tromper, mais, à ma connaissance, Qt n'a jamais touché à la licence des bibliothèques externes qu'elle utilise, à moins, bien sur, d'en avoir réécrit le code.

    Je n'ai pas les sources pour vérifier, mais, si tu prend le plugin jpeg ou le plugin png, par exemple, qui ne font que permettre de disposer de ces bibliothèques lorsqu'elles ne sont pas déjà installées (dans leur version dev) sur l'ordinateur, il me sembles qu'ils suivent exactement la licence de la version d'origine.

    En fait, c'est assez paradoxale ce genre de truc, car je crois que la distinction est encore plus (floue ? / précise ?) dans le sens où le code source de la bibliothèque reste sous sa licence d'origine alors que le "packaging" (le fameux qt-libgpeg-plugin suit la politiqu de licence de Qt. Comme je l'ai dit, je n'ai pas de quoi vérifier ici, mais il me semble que c'est quelque chose du genre

    Sans oublier que, au final, c'est sans doute plus compliqué que cela (obligation de lier statiquement dans un projet commercial), dans le sens où tu n'accédera sans doute jamais directement aux fonctionnalités spécifiques de la bibliothèque : tu n'utiliseras normalement que... les fonctionnalités exposées par les classes fournies par Qt, qui feront appel à cette bibliothèque ( c'est le fameux "packaging" dont je viens de parler)

    Mais, de toutes façons, toi tu utilises Qt, en version dynamique ou statique selon ton gout. Et si, par l'utilisation d'une bibliothèque dont la licence entrerait en conflit avec les propres licences utilisées par Qt, c'est à Qt à faire en sorte de n'autoriser que l'utilisation des bibliothèques statiques si il y a lieu

    Il me semble (la dernière fois que j'ai vu une version commerciale remonte à pas mal de temps) qu'il y a "presque de tous temps" eu des éléments qui n'étaient accessibles qu'en version statiques lorsqu'ils étaient utilisés dans la version commerciale
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 585
    Points
    188 585
    Par défaut Un module Qt PDF en cours de préparation pour Qt Widgets
    Une demande récurrente avec Qt est d’afficher un fichier PDF dans une interface sans besoin de bibliothèque externe (comme Poppler ou, avec une interface moins facile à utiliser, MuPDF). En 2017, déjà, un module était en voie de développement, en exploitant PDFium, la bibliothèque JavaScript utilisée par Chrome pour afficher des PDF. Le choix de PDFium est très pragmatique : sa licence est très permissive (BSD), le code est maintenu de manière très active (de par son utilisation dans Chrome) et, last but not least, dans des documents très complexes, le rendu de PDFium est bien plus rapide que, par exemple, Poppler.


    Depuis lors, ce petit projet est arrivé à un certain degré de maturité : il est maintenant possible d’afficher un PDF, mais aussi d’y naviguer, de définir les paramètres d’affichage (vue page par page ou continue, par exemple), le tout en C++, grâce à la classe QPdfView. Tout le rendu est effectué dans un fil d’exécution séparé, ce qui évite de bloquer l’interface graphique.




    Pour le moment, QPdfView et le module Qt PDF ne sont utilisables qu’en C++ dans des applications à base de widgets. L’installation est raisonnablement facile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    git clone git://code.qt.io/qt-labs/qtpdf
    cd qtpdf
    git submodule update --init --recursive
    qmake
    make
    cd examples/pdf/pdfviewer
    qmake
    make
    ./pdfviewer
    Tout comme l’utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <QPdfDocument>
    #include <QPdfView>
     
    QPdfDocument *document = new QPdfDocument;
    document->load("document.pdf");
     
    QPdfView *view = new QPdfView;
    view->setDocument(document);
    view->show();

    Pour ses prochaines versions,Qt PDF devrait commencer par mettre à jour sa version de PDFium, une opération rendue plus compliquée que prévu à cause de changements dans le système de compilation de la bibliothèque (un passage de Gyp à GN, qu’il faut à nouveau interfacer avec qmake).


    En sus, certaines fonctionnalités ne sont pas encore disponibles, comme les liens et la navigation vers des sections du document. Également, il faut encore y ajouter une interface Qt Quick… et peaufiner la documentation.


    Source : Browse PDFs in a Qt Widgets application.


    Voir aussi : le ticket de suivi.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  10. #10
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Avec PyQt5, j'utilise pdf.js téléchargé ici: https://mozilla.github.io/pdf.js/.

    Avec QWebEngineView, on affiche un pdf très simplement. Par exemple:

    Code python : 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
    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    # Python 3.5, PyQt5 v5.9
     
    import sys
    import os
    from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets
     
    class Affichepdf(QtWebEngineWidgets.QWebEngineView):
        def __init__(self, fichierpdf, viewerpdf):
            super().__init__()
            self.resize(600, 800)
            PDFJS = 'file:///' + viewerpdf.replace('\\', '/')
            PDF = 'file:///' + fichierpdf.replace('\\', '/')
            self.load(QtCore.QUrl.fromUserInput('%s?file=%s' % (PDFJS, PDF)))
     
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        affichepdf = Affichepdf("fichier_pdf_a_afficher.pdf", 'pdfjs/web/viewer.html')
        affichepdf.show()
        sys.exit(app.exec_())

    Mais je préfèrerais bien sûr une solution PyQt5 plutôt qu'un bricolage javascript: j’attends avec impatience!
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/06/2015, 12h06
  2. lecture pdf dans controle webrowser et shortcut
    Par Jérémy Lefevre dans le forum C#
    Réponses: 0
    Dernier message: 07/06/2012, 17h22
  3. Module recherche en php:: recherche dans le txt du pdf
    Par tatutatu2009 dans le forum Langage
    Réponses: 0
    Dernier message: 15/03/2011, 09h48
  4. lecture et ecriture dans un fichier PDF
    Par kha_yassine dans le forum Documents
    Réponses: 1
    Dernier message: 05/07/2007, 19h36
  5. Réponses: 2
    Dernier message: 26/09/2003, 14h51

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