QGIS 프로젝트 작성기 인쇄를 자동화 하시겠습니까?


9

약 10x QGIS 프로젝트 파일로 구성된 큰 프로젝트가 있습니다. 각 프로젝트에는 최대 10 개의 맵을 생성하도록 설정된 아틀라스가있는 인쇄 작곡가가 포함되어 있습니다.

작곡가 아틀라스를 사용하여 각 프로젝트를 자동으로 열고 PDF를 만드는 가장 쉬운 방법은 무엇입니까?

(이것과 같은 것이 이상적입니다-가능하다면 확실하지 않습니다)

C : \ OSGeo4W \ bin \ qgis.bat-프로젝트 MyProject1.qgs --code SaveAtlasAsPdf.py C : \ OSGeo4W \ bin \ qgis.bat --project MyProject2.qgs --code SaveAtlasAsPdf.py

답변:


9

이것을 파이썬 파일에 저장하고 --code arg에서 사용하면 필요한 작업을 수행해야합니다.

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를 닫는 데 사용할 수 있습니다 .
Nathan W

예, 완벽하게 작동합니다. 나는 되었다 실제로 종료 할 수있는 방법을 찾기 위해 노력. iface.actionExit (). trigger () 및 sys.exit ()를 시도했지만 어떤 이유로 작동하지 않습니다.
Damien

시도QgsApplication.exit()
Nathan W

iface.actionExit()프로젝트가 변경되고 종료를 차단하면 대화 상자가 표시 QgsApplication.exit()됩니다. 대 프로세스를 방해합니다 .
Nathan W
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.