Автоматизація друку композиторів проекту QGIS?


9

У мене є великий проект, який складається з 10-кратних файлів проекту QGIS. Кожен проект містить композитор друку з атласом, створеним для створення до 10 карт.

Який найпростіший спосіб автоматизувати відкриття кожного проекту та створення PDF-файлу за допомогою композитора-атласу?

(Щось подібне було б ідеально - не впевнений, чи можливо)

C: \ OSGeo4W \ bin \ qgis.bat --проект MyProject1.qgs - код SaveAtlasAsPdf.py C: \ OSGeo4W \ bin \ qgis.bat --проект MyProject2.qgs - код SaveAtlasAsPdf.py

Відповіді:


9

Збереження цього у файлі Python та використання його у аргументі --code має робити все, що вам потрібно:

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

from qgis.core import *
from qgis.gui import *
from qgis.utils import iface

for comp in iface.activeComposers():
    print comp
    folder = r"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()

Це дозволить зафіксувати всі композитори та надрукувати їх, якщо у них включений атлас в один PDF для кожного.

ПРИМІТКА Ви можете відкрити файл проекту на сесії QGIS, використовуючи iface.addProject. Тож ви могли б зробити це, щоб уникнути відкриття багатьох сесій QGIS.

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

from qgis.core import *
from qgis.gui import *
from qgis.utils import iface

def print_it():
    for comp in iface.activeComposers():
        print comp
        folder = r"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()

for project in projectlist:
    iface.addProject(project)
    print_it()

Відповідна посада та чудова відповідь!
CARTOS

Я припускаю, що це спрацювало? Ви можете використовувати sys.exit()для закриття QGIS, коли закінчите.
Натан Вт

Так, це прекрасно працює. Я був на насправді намагаюся знайти шлях до виходу. Я спробував iface.actionExit (). Trigger () і sys.exit (), але чомусь вони не працюють.
Демієн

СпробуйтеQgsApplication.exit()
Nathan W

iface.actionExit()покаже діалогове вікно, якщо проект змінився і заблокує вихід, порівняно з чим QgsApplication.exit()просто запустить процес.
Натан Вт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.