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

PyQt Python Discussion :

Problème de rendu d'un pdf à l'intérieur d'un AQWebEngineView (avec pdf.js)


Sujet :

PyQt Python

  1. #1
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 330
    Points : 207
    Points
    207
    Par défaut Problème de rendu d'un pdf à l'intérieur d'un AQWebEngineView (avec pdf.js)
    Bonjour à tous,
    J'utilise Qt for Python version 5.15.0 (PySide 2) et Python 3.7. J'affiche un pdf à l'intérieur d'un AQWebEngineView avec pdfjs. Extrait du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            self.webview = AQWebEngineView()
            PDFJS = defFile(self.parent,
                                    type="App",
                                    subreps=["pdfjs-2.7.570-dist", "web",],
                                    file="viewer.html",
                                    make=False,)
            fileJS = f"file:///{PDFJS}".replace('\\', '/')
            file = f"file:///{self.fullpath}".replace('\\', '/')
            url = QtCore.QUrl.fromUserInput(f"{fileJS}?file={file}")
            self.webview.load(url)
    Le pdf s'affiche partiellement. Les schémas et photos apparaissent normalement, certain texte, par contre, n'apparait que lorsque je zoome fortement (entre 380% et 430% voire plus ) ! ce qui n'est pas très ergonomique ...
    Quelqu'un a t-il déjà été confronté à ce probleme ? Est-ce un bug, un problème de paramétrage ou une erreur de moi ???
    Merci pour vos remarques que j'attends avec impatience !
    NB : Le dernier fichier est le pdf sous acrobat
    Images attachées Images attachées     

  2. #2
    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,

    J'utilise aussi "pdfjs" de Mozilla (https://mozilla.github.io/pdf.js/get...rted/#download) version 2.7.570, avec une fenêtre QWebEngineView pour afficher un fichier pdf, mais je n'ai encore pas rencontré de tel problème.

    Voilà un petit code de test. Le code pdfjs désarchivé se trouve dans un sous-répertoire "pdfjs" par rapport au programme lui-même:

    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
    # -*- coding: utf-8 -*-
    # PyQt5 5.15
     
    """
    Affichage d'un fichier pdf dans une fenêtre QWebEngineView 
    """
     
    import sys
    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("Analyse_combinatoire_1.pdf", 'pdfjs/web/viewer.html')
        affichepdf.show()
     
        sys.exit(app.exec_())
    Voilà ce que ça donne à l'écran avec le fichier que j'ai utilisé:

    Nom : copiedecran.jpg
Affichages : 398
Taille : 152,2 Ko
    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

  3. #3
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 330
    Points : 207
    Points
    207
    Par défaut
    Bonjour Tyrtamos,
    Merci pour ta réponse rapide !
    Effectivement on utilise le même code pdfjs. La différence c'est que tu l'utilises via PyQt5 et moi via Qt for Python (Pyside2). De plus, j'utilise le QWebEngineView dans un layout imbriqué. J'avoue que je suis, pour l'instant, un peu songeur ... Je vais essayer des tests en l'utilisant dans une fenêtre toute simple et on verra ... Si tu as d'autres idées ...
    @+
    Depuis, j'ai injecté ton code dans mon environnement (une fenêtre toute simple), mais toujours le même souci ...
    ...
    J'ai fait quelques recherches, je suis tombé là dessus :
    https://www.pdftron.com/blog/pdf-js/...-js-rendering/
    A creuser et surtout trouver des solutions ...

  4. #4
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 330
    Points : 207
    Points
    207
    Par défaut
    Après quelques semaines de recherche et de test, je vous livre le principe de ma solution.
    Tout d'abord je suis allé sur le site hébergeant pdf.js (GitHub) pour déposer une question. Malheureusement, il n'y a pas de support pour ce type d'utilisation de pdf.js
    Unfortunately that's not an environment that we can realistically support, since the PDF.js library is written primarily for browsers;
    Devant la difficulté de résoudre le problème, j'ai choisi l'option de "fabriquer" un viewer maison. Après moulte recherches, j'ai opté pour PyMuPDF (fitz) : https://pymupdf.readthedocs.io/en/la...-the-name-fitz qui permet de traiter le sujet de façon assez élégante.
    Bonne continuation à tous !

  5. #5
    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,

    Merci pour avoir donné une solution alternative. L'affichage d'un pdf sous Qt5 est un problème depuis longtemps...

    A noter qu'on peut aussi appeler sous PyQt5 le visualiseur pdf par défaut de l'OS (Acrobat Reader d'Adobe par exemple).
    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. [2.2.1] PDF - problème de rendu
    Par erwan.bodere dans le forum BIRT
    Réponses: 2
    Dernier message: 04/02/2008, 10h03
  2. Problème taille PdfPTable sur le rendu au format PDF
    Par sironimo dans le forum Documents
    Réponses: 1
    Dernier message: 28/12/2006, 10h25
  3. Problème d'impression d'un pdf sous format d'une etiquette
    Par **jouly** dans le forum Périphériques
    Réponses: 2
    Dernier message: 04/04/2006, 13h18
  4. [wxPython] problème de rendu
    Par tool69 dans le forum wxPython
    Réponses: 5
    Dernier message: 25/09/2005, 19h43
  5. Problème de rendu 2D
    Par Freakazoid dans le forum DirectX
    Réponses: 6
    Dernier message: 04/08/2004, 21h47

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