Pages: 1
- Sujet précédent - QGIS 3.10: execution de plusieurs projets sans les ouvrir - Sujet suivant
#1 Mon 21 June 2021 16:14
- gbodet
- Participant actif
- Lieu: Compiègne
- Date d'inscription: 28 Sep 2005
- Messages: 51
QGIS 3.10: execution de plusieurs projets sans les ouvrir
Bonjour,
Est-il possible de lancer la génération des atlas présent dans x projets QGIS ?
En effet, je dispose actuellement de 22 projets QGIS intégrant chacun un atlas constitué de mises en page particulières. L'intégration dans un seul projet s'est révélé trop lourd pour QGIS.
L'objectif serait de lancer dans une ligne de commande l'export en PDF des cartes présentes dans les Atlas de chaque projet QGIS pour gagner du temps.
J'ai déjà testé cette solution mais sans succès
https://ubuntuplace.info/questions/4601 … r-printing
Voici en détail la procédure réalisée :
Voici ce que je lance dans un fichier BAT
Code:
""C:\Program Files\QGIS3.10\bin\qgis-ltr-bin-g7.exe" --project R:\Ressources\4-Partage\3-Procedures\QGIS\PLUiH_ARC_planche_graphique_test_3.x\200067965_reglement_graphique_A0_3.x.qgs --code c:\temp\print.py PAUSE
Le fichier print.py contient le code ci-dessous pris sur le site en référence dans mon 1er email.
Code:
from qgis.core import * from qgis.gui import * from qgis.utils import iface for comp in iface.activeComposers(): print comp folder = "C:\temp" title = "testing" printer = QPrinter() painter = QPainter() comp.composition().setUseAdvancedEffects(False) myAtlas = comp.composition().atlasComposition() if myAtlas.enabled(): myAtlas.beginRender() comp.composition().setAtlasMode(QgsComposition.ExportAtlas) myAtlas.setFilenamePattern(u"'{}_'||$feature".format(title)) for i in range(0, myAtlas.numFeatures()): myAtlas.prepareForFeature(i) filename = os.path.join(folder, title + '.pdf') print filename comp.composition().beginPrintAsPDF(printer, filename) comp.composition().beginPrint(printer) printReady = painter.begin(printer) if i > 0: printer.newPage() comp.composition().doPrint(printer, painter) myAtlas.endRender() painter.end()
En lançant le .bat, le projet QGIS s'ouvre et me donne une erreur
Code:
Une erreur est survenue lors de l'exécution du code suivant: with open('C:/temp/print.py','r') as f: exec(f.read())
Cordialement
Dernière modification par gbodet (Mon 21 June 2021 16:40)
Hors ligne
#2 Tue 22 June 2021 00:24
Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir
Bonjour,
Le code récupéré ne marchera jamais. Les imports Python utilisent de l'exemple original utilisent Qt4. Cela signifie que le code est pour Python 2 et QGIS 2.x. Depuis avec la version 3 de QGIS, l'API a énormément changée pour la partie impression. Ce code est donc devenu obsolète.
Vous avez d'autres options:
* utiliser cet exemple https://github.com/carey136/Standalone- … tlas-QGIS3 qui est basée sur Python
* passer l'algorithme de processing "native:atlaslayouttopdf" via PyQGIS et entre chaque exécution, charger un nouveau projet parmi vos 22 via PyQGIS
* passer par la ligne de commande qgis_process mais j'ai rencontrée un erreur pour cela. J'ai posté d'ailleurs sur un forum anglophone concernant ce problème https://gis.stackexchange.com/questions … df-qgis-al
Les 2 dernières solutions demandent une version de QGIS récente. Je crois que l'algorithme mentionné dans mes 2 derniers points est arrivé en 3.16. La ligne de commande qgis_process est arrivée depuis QGIS 3.14
Cordialement
Thomas
Hors ligne
#3 Tue 22 June 2021 21:11
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3927
Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir
Bonjour,
Autre alternative, téléchargez la version master de https://github.com/DelazJ/MapsPrinter (depuis le bouton vert "Code"), dézippez et installez dans vos extensions (ça va rajouter deux algorithmes dans la boîte à outils) et exécutez l'algorithme "Export de mises en page depuis un dossier" (on suppose donc que tous les projets sont dans un même dossier).
Hors ligne
#4 Wed 30 June 2021 14:45
- gbodet
- Participant actif
- Lieu: Compiègne
- Date d'inscription: 28 Sep 2005
- Messages: 51
Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir
Bonjour,
1 - J'ai testé la solution en ligne de commande par rapport à votre exemple https://github.com/carey136/Standalone- … tlas-QGIS3, en modifiant les paramètres de valeurs
Code:
# -P = Project file myProject = 'R:\\Ressources\\4-Partage\\3-Procedures\\QGIS\\PLUiH_ARC_planche_graphique_3.x\\PLUiH_ARC_planche_graphique_3.x' # -L = Layout ("Layout name") layoutName = 'ARMANCOURT_A0_PORTRAIT_1/2500_27' # -C = Coverage Layer Name ("Layer Name") coverageLayer = 'geo_p_planche_pluiarc' # -F = filter ("column" "operator" "value") atlasFilter = '"id_planche" = "60023"' # -O = Output Format (pdf or image) outputFormat = 'pdf' # -D = Output Directory ("c:your\output" - exclude trailing "\") outputFolder = 'C:\\temp\\pluih_test_export_auto' # -N = Image output Query outputName = '@atlas_featurenumber' #e.g.\"Parish\" || \' \' || \"Number\" where parish and number are columns # -Q = PDF Name pdfName = 'Export'
Mais j'ai une erreur python
Code:
Traceback (most recent call last): File "C:\PROGRA~1\QGIS3~1.16\apps\Python37\lib\code.py", line 90, in runcode exec(code, self.locals) File "<input>", line 1, in <module> File "<string>", line 11, in <module> File "C:\PROGRA~1\QGIS3~1.16\apps\Python37\lib\argparse.py", line 1641, in __init__ prog = _os.path.basename(_sys.argv[0]) AttributeError: module 'sys' has no attribute 'argv'
N'étant pas un spécialiste, cette erreur est-elle corrigeable ? J'ai lancé le code Python dans une console sous QGIS 3.16 (64bits).
2 - La solution du plugin MapsPrinter ne fonctionne pas. Le Plugin s'installe, quand je le lance, pas de fichier écrit en PDF dans le répertoire indiqué et pas de message indiquant une erreur, juste une information précisant
Code:
Opération interrompue : Des cartes de 1 mises en page(s) sur 1 ont été exportées dans "C:/temp/pluih_test_export_auto" avant l'annulation. Certains fichiers pourraient être incomplets.
Cordialement
Hors ligne
#5 Thu 01 July 2021 10:44
- gbodet
- Participant actif
- Lieu: Compiègne
- Date d'inscription: 28 Sep 2005
- Messages: 51
Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir
Bonjour,
Afin de résoudre mon problème de message d'erreur, après consultation de plusieurs sites, j'ai intégré après la command
Code:
import sys
la synthaxe suivante
Code:
if not hasattr(sys, 'argv'): sys.argv = ['']
Le lancement du code dans une console Python m'indique bien l'exécution du fichier et affiche
Code:
Success !
.
En revanche, aucune mise en page en PDF, et impossible d'utiliser QGIS après.
Ci-joint le fichier .py. S'agit-il d'un problème lié aux paramètres (j'ai testé avec "" et '') ou de l'Atlas ?
Cordialement
Hors ligne
#6 Thu 01 July 2021 15:11
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 611
Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir
Bonjour,
Je ne suis pas expert en Python mais Vous pouvez vous inspirer des scripts que j'ai mis en fin de ce sujet et qui m'a permis faire ce que vous cherchez à faire.
https://georezo.net/forum/viewtopic.php?id=111123
Bien à vous,
Pascal PLUVINET
Hors ligne
#7 Fri 02 July 2021 08:29
- gbodet
- Participant actif
- Lieu: Compiègne
- Date d'inscription: 28 Sep 2005
- Messages: 51
Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir
Bonjour,
Merci à tous pour vos retours. J'ai pu faire fonctionner le Plugin Maps Printer après mettre aperçu qu'il fallait écrire le nom de la mise en page en minuscule, les majuscules ne fonctionnant pas. En revanche, je ne dispose que de l'algorithme Export groupé de mise en page" et non celui permettant d'exporter les mises en page à partir du dossier.
Pour le fonctionnement de vos scripts Python, je n'ai pas encore pu les faire fonctionner. Le premier fournit par ThomasG ne marche toujours pas, il se lance et bloc QGIS. Celui de ppluvinet se lance et me renvoi SUCCESS sans pour autant écrire le PDF.
Il s'agit peut-être d'un problème de variable ?
Code:
from qgis.core import QgsApplication, QgsProject, QgsLayoutExporter import os from qgis.core import QgsApplication, QgsProject, QgsProject from qgis.core import QgsProject from qgis.gui import QgsMapCanvas, QgsLayerTreeMapCanvasBridge from qgis.utils import iface from qgis.core.contextmanagers import qgisapp from PyQt5.QtCore import QFileInfo import sys def export_atlas(qgs_project_path, layout_name, outputs_folder): # Open existing project project = QgsProject.instance() project.read(qgs_project_path) # Open prepared layout that as atlas enabled and set layout = project.layoutManager().layoutByName(layout_name) # Start atlas iterator atlas = layout.atlas() if atlas.beginRender(): while atlas.next(): exporter = QgsLayoutExporter(layout) settings = QgsLayoutExporter.ImageExportSettings() filename = atlas.currentFilename()+'_.png' #f'atlas.currentFilename().png' filename_path = os.path.join(outputs_folder, filename) print(f'Export '+atlas.currentFilename()) exporter.exportToImage(filename_path, settings) print(f'finished') atlas.endRender() else: print('WARNING - No atlas features available for export!') def main(): # Start a QGIS application without GUI qgs = QgsApplication([], False) qgs.initQgis() #Chemon des projets qgz, chemin du répertoire d'export et nom du composeur project_path = sys.argv[1] output_folder = 'C:/temp/pluih_test_export_auto/' layout_name = 'planche_27' export_atlas(project_path, layout_name, output_folder) # Close the QGIS application qgs.exitQgis() if __name__ == "__main__": main()
Cordialement
Dernière modification par gbodet (Fri 02 July 2021 08:50)
Hors ligne
#8 Fri 02 July 2021 09:50
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3927
Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir
Bonjour,
J'ai pu faire fonctionner le Plugin Maps Printer après mettre aperçu qu'il fallait écrire le nom de la mise en page en minuscule, les majuscules ne fonctionnant pas. En revanche, je ne dispose que de l'algorithme Export groupé de mise en page" et non celui permettant d'exporter les mises en page à partir du dossier.
On parle bien de la version master à télécharger sur github? Je viens d'essayer et ça marche: j'ai les deux algos et il n'y a pas de souci avec les mises en page avec majuscule.
Hors ligne
#9 Fri 02 July 2021 15:02
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 611
Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir
Avez-vous bien définit dans vos Altas un nom d'export. et dans output_folder , avez vous défini un chemin correct ?
Pascal PLUVINET
Hors ligne
#10 Sat 03 July 2021 13:22
Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir
Bonjour,
J'avais indiqué trois solutions. Vous avez essayé les 2 premières mais la dernière est bien plus simple. Vous l'avez vraiment essayé?
Code:
qgis_process run native:atlaslayouttopdf --project_path=/home/thomasg/own-projects/sample-qgis-server/projects/atlas_minimum.qgs --LAYOUT=v1_layout_atlas --OUTPUT=/tmp/atlas1.pdf
Cordialement
Thomas
Hors ligne
#11 Tue 06 July 2021 08:42
- gbodet
- Participant actif
- Lieu: Compiègne
- Date d'inscription: 28 Sep 2005
- Messages: 51
Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir
Bonjour,
Merci encore à toutes les personnes qui m'ont répondu et proposées des solutions.
Je suis parti pour l'utilisation du Plugin MapsPrinter https://github.com/DelazJ/MapsPrinter qui fonctionne maintenant très bien pour l'export des mises en pages contenus dans des projets Qgis situés dans un dossier ou dans un projet seul.
Je remercie l'auteur DelazJ pour avoir apporter des éléments importants pour l'installation, la correction d'un bug pour l'export en PDF et une amélioration concernant la nomination des fichiers exportés par nom de l'atlas.
Pour ceux qui souhaitent l'utiliser, pour l'installation, télécharger le ZIP sur https://github.com/DelazJ/MapsPrinter, décompressé dans le répertoire des plugin QGIS et ne pas oublier de renommer le répertoire
Code:
MapsPrinter
Lancez QGIS (testé avec la V3.10 et 3.16), et dans le menu Extension vous aurez accès aux 2 fonctions. Dans les 2 cas, j'utilise
Code:
Exécuter comme processus de lot
et je complète les informations demandées.
Cordialement
Hors ligne
#12 Tue 13 July 2021 14:19
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3927
Re: QGIS 3.10: execution de plusieurs projets sans les ouvrir
Bonjour,
Pour ceux qui souhaitent l'utiliser, pour l'installation, télécharger le ZIP sur https://github.com/DelazJ/MapsPrinter, décompressé dans le répertoire des plugin QGIS et ne pas oublier de renommer le répertoire
Pour info, les versions 0.7 (pour QGIS <3.8) et 0.8 de Maps Printer sont sorties et intègrent tous ces fonctions et correctifs, donc point besoin désormais de passer par le téléchargement de la master. La procédure d'installation classique via le gestionnaire d'extensions de QGIS est vivement recommandée, la version master repassant en mode "je ne vous garantis pas que ça fonctionne à coup sûr!!!".
dans le menu Extension vous aurez accès aux 2 fonctions. Dans les 2 cas, j'utilise
Code:
Exécuter comme processus de lot
Je serais curieux de savoir dans quel contexte vous utilisez le processus de lot pour l'algorithme "Exporter les mises en page du projet". L'interface classique devrait répondre au besoin, non?
Autrement la suggestion de ThomasG en ligne de commande avec QGIS>=3.14 peut être encore plus efficace
Code:
qgis_process run mapsprinter:exportlayoutsfromfolder --PROJECTS_FOLDER=/le/dossier/de/projets --EXTENSION=0 --OUTPUT_FOLDER=/le/dossier/export
Hors ligne
Pages: 1
- Sujet précédent - QGIS 3.10: execution de plusieurs projets sans les ouvrir - Sujet suivant