QGIS proje bestecisi yazdırmayı otomatikleştirme?


9

Yaklaşık 10x QGIS proje dosyasından oluşan büyük bir projem var. Her proje, en fazla 10 harita oluşturmak için ayarlanmış bir atlaslı bir baskı bestecisi içerir.

Her projenin açılışını otomatikleştirmenin ve besteci atlasını kullanarak PDF oluşturmanın en kolay yolu nedir?

(Böyle bir şey ideal olurdu - mümkün olup olmadığından emin değilim)

C: \ OSGeo4W \ bin \ qgis.bat - proje MyProject1.qgs --code SaveAtlasAsPdf.py C: \ OSGeo4W \ bin \ qgis.bat - proje MyProject2.qgs --code SaveAtlasAsPdf.py

Yanıtlar:


9

Bunu bir Python dosyasına kaydetmek ve --code argümanında kullanmak, ihtiyacınız olanı yapmalıdır:

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()

Bu, tüm bestecileri döngüye sokar ve atlas etkinleştirilmişse her biri için tek bir PDF olarak yazdırır.

Not Bir proje dosyasını kullanarak bir QGIS oturumunda açabilirsiniz iface.addProject. Böylece, birçok QGIS oturumu açmamak için bunu yapabilirsiniz.

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()

İlgili yazı ve harika cevap!
CARTOS

Çalıştığını varsayacağım? sys.exit()İşiniz bittiğinde QGIS'i kapatmak için kullanabilirsiniz .
Nathan W

Evet, mükemmel çalışıyor. Ben edildi aslında çıkışa bir yol bulmaya. Iface.actionExit (). Trigger () ve sys.exit () denedim ama bazı nedenlerden dolayı çalışmıyorlar.
Damien

DeneyinQgsApplication.exit()
Nathan W

iface.actionExit()proje değiştiyse ve çıkışı engellediğinde bir diyalog gösterecektir, QgsApplication.exit()bu da sadece süreci hızlandıracaktır.
Nathan W
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.