IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Un module Qt PDF en cours de préparation pour Qt Widgets
Basé sur PDFium, il offre toutes les fonctionnalités de base d'un lecteur de PDF

Le , par dourouc05

384PARTAGES

12  0 
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
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
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.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de tyrtamos
Expert éminent https://www.developpez.com
Le 20/07/2018 à 7:58
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
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