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.
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.
https://www.kdab.com/wp-content/uplo...222_132631.png
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:
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:
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.