QGISプロジェクトコンポーザーの印刷を自動化しますか?


9

約10倍のQGISプロジェクトファイルで構成される大きなプロジェクトがあります。各プロジェクトには、最大10個のマップを生成するように設定されたアトラスを備えた印刷コンポーザーが含まれています。

各プロジェクトのオープンを自動化し、composerアトラスを使用してPDFを作成する最も簡単な方法は何ですか?

(このようなものが理想的です-可能かどうかはわかりません)

C:\ OSGeo4W \ bin \ qgis.bat --project MyProject1.qgs --code SaveAtlasAsPdf.py C:\ OSGeo4W \ bin \ qgis.bat --project MyProject2.qgs --code 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 2016年

私はそれがうまくいったと思いますか?sys.exit()完了したら、を使用してQGISを閉じることができます。
ネイサンW

はい、完全に機能します。私実際に終了する方法を見つけようとしていました。iface.actionExit()。trigger()とsys.exit()を試しましたが、何らかの理由で機能しません。
ダミアン

試してみるQgsApplication.exit()
ネイサンW

iface.actionExit()プロジェクトが変更された場合はダイアログが表示され、終了がブロックされQgsApplication.exit()ます。vsはプロセスを実行します。
Nathan W
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.