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

  1. #1
    Responsable Qt & Livres

    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 ou PyQt (tutoriels, FAQ, traductions), 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 éclairé
    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  
    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

    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 ou PyQt (tutoriels, FAQ, traductions), 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
    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

    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 éclairé
    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
    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

    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 ou PyQt (tutoriels, FAQ, traductions), 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. ###raw>post.musername###
    Expert éminent
    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!
      0  0