Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GeoRezo vous rend service, faites un don.

Merci à tous pour votre fidélité.

L'équipe GeoRezo

#1 lun. 25 septembre 2017 17:07

MaudJ
Membre
Date d'inscription: 23 janv. 2017
Messages: 6

QGIS 2.18 & PyQgis: affichage couche et composeur d'impression

Bonjour,
Afin d'enregistrer au format pdf ou png mes couches de vecteur nouvellement créées, je les charge dans qgis, puis initialise le composeur ensuite j'exporte le composeur, soit au format pdf, soit au format png.
Sauf que dans la réalité, mon fichier vecteur au format shp est bien créé, il est bien chargé puisque quand le traitement se termine, il est ouvert dans QGIS et corect, mais dans le fichier enregistré du composeur, il n'apparait pas, pas plus que sa légende. Est ce un problème de chargement du fichier avant impression? C'est à dire que l'impression serait plus rapide que le chargement?
Voici mon code: (j'ai laissé le remove du vecteur en commentaire pour vérifié que la couche se charge bien et je la vois bien chargée dans qgis en fin de traitement).
Merci pour votre aide.

Code:

    def imprimer(self, form):
    # charge la couche dans QGIS
    layer = iface.addVectorLayer(self.pathShp, self.nomLegende, "ogr")
    QgsMapLayerRegistry.instance().addMapLayer(layer)
    # rend la couche visible    
    iface.legendInterface().setLayerVisible(layer, True)
    iface.mapCanvas().refreshAllLayers()
    # initialise le composeur et ses différents items     
    self.initComposeur()
    self.composeur.refreshItems()
    if form == ".pdf":
        self.composeur.exportAsPDF(self.pathCarte)
    else:
        image =    self.composeur.printPageAsRaster(0)
        image.save(self.pathCarte) 
    #QgsMapLayerRegistry.instance().removeMapLayer(layer)

    def initComposeur(self):
    canvas = iface.mapCanvas()
    for itemComp in self.composeur.items():
        if itemComp.type() == QgsComposerItem.ComposerLabel:
            if itemComp.id() == '0': 
                itemComp.setText(self.titre)
            else:
                itemComp.setText(self.commentaire)
        if itemComp.type() == QgsComposerItem.ComposerLegend:
            itemComp.setLegendFilterByMapEnabled(True)
        if itemComp.type() == QgsComposerItem.ComposerMap:
            itemComp.setMapCanvas(canvas)

Hors ligne

 

#2 mer. 11 octobre 2017 16:43

MathieuR
Moderateur
Lieu: aix-en-provence
Date d'inscription: 16 févr. 2009
Messages: 1325

Re: QGIS 2.18 & PyQgis: affichage couche et composeur d'impression

Bonjour,

La génération de PDF n'est pas chose aisée. Dans un projet, il m'a fallu pas mal de temps afin d'en saisir les subtilités grâce, notamment, à des échanges sur georezo et forumsig (https://georezo.net/forum/viewtopic.php?pid=284842 et http://www.forumsig.org/showthread.php/ … n-pyqgis). Voici en tout cas un code qui fonctionne. A intégrer et adapter dans les méthodes de ton objet..

Code:

from PyQt4.QtCore import *
from PyQt4.QtGui import *

iface = qgis.utils.iface

# permet de recuperer l'objet composeur d'apres nom
def getCompositionByName(iface, name) :
    for composer_view in iface.activeComposers() :
            print composer_view.composerWindow().windowTitle()
            if composer_view.composerWindow().windowTitle()==name :
                myComposition = composer_view.composition()
                return(myComposition)


def lancerImpression(nomComposeur, fichierSortie):
    myComposition = getCompositionByName(iface, nomComposeur)

    printer = QPrinter()
    painter = QPainter()

    myComposition.beginPrintAsPDF(printer, fichierSortie)
    printReady = painter.begin(printer)
    myComposition.doPrint(printer, painter)
    painter.end()


lancerImpression('Composeur 1', 'C:/temp/print.pdf')

Hors ligne

 

#3 jeu. 12 octobre 2017 21:34

MaudJ
Membre
Date d'inscription: 23 janv. 2017
Messages: 6

Re: QGIS 2.18 & PyQgis: affichage couche et composeur d'impression

Bonjour,
Déjà merci pour ta réponse.
En fait la création de pdf ou d'image ne posait pas problème en soit avec mon code. Le soucis venait en fait d'un problème de tâche non terminée par le processus.
J'ai finis par trouver!
Un petit:

Code:

QtCore.QCoreApplication.processEvents()

Et ça force le processus à terminer toutes les tâches en cours.
Je ne sais pas pourquoi la carte ne voulait pas s'afficher d'elle-même. J'ai fini par trouver d'où ça venait car j'arrivais à imprimer correctement lorsque j'envoyais une boite de dialog qui attendait que l'utilisateur clique sur le bouton juste après le refresh layer. Du coup, les tâches se terminaient pendant ce laps de temps. Ce que je ne comprend pas c'est pourquoi, alors que j'ai tenté le multi-threading, celui ci n'a pas fonctionné, et pourquoi tout simplement cette tâche là ne veut pas se terminer... Enfin maintenant j'ai trouvé une solution qui me convient. Je vais donc cesser de me casser la tête.

Hors ligne

 

#4 ven. 13 octobre 2017 09:59

MathieuR
Moderateur
Lieu: aix-en-provence
Date d'inscription: 16 févr. 2009
Messages: 1325

Re: QGIS 2.18 & PyQgis: affichage couche et composeur d'impression

Merci pour le retour !

Hors ligne

 

#5 ven. 13 octobre 2017 12:07

lejedi76
Membre
Date d'inscription: 8 août 2013
Messages: 239

Re: QGIS 2.18 & PyQgis: affichage couche et composeur d'impression

Salut Maudj,

tu vas peut-être me retirer une épine du pied.
J'ai un aussi un atlas qui ne se réalisait pas bien. Après étant donné que j'effectuais des graphiques à base de librairies javascript , je me suis dit que c'était peut-être lié.

Du coup :

Code:

QtCore.QCoreApplication.processEvents()

tu l'intègres à quel moment ?

EDIT : après test, avant l'export et ca fonctionne nickel !!!!!!

Tu viens de me sauver des heures et des heures de boulot, car quand tu dois exporter un atlas page par page c'est fastidieux !

Dernière modification par lejedi76 (ven. 13 octobre 2017 12:28)

Hors ligne

 

#6 ven. 13 octobre 2017 12:49

MaudJ
Membre
Date d'inscription: 23 janv. 2017
Messages: 6

Re: QGIS 2.18 & PyQgis: affichage couche et composeur d'impression

Oui je le fais juste avant d'exporter en pdf ou format image. Et contente que ça puisse te servir, vu le temps que j'y ai passé, autant que ça serve à d'autres!

Hors ligne

 

Pied de page des forums

Powered by FluxBB

Partagez  |