स्वचालित QGIS प्रोजेक्ट कंपोजर प्रिंटिंग?


9

मेरे पास एक बड़ी परियोजना है जिसमें लगभग 10x QGIS परियोजना फाइलें हैं। प्रत्येक परियोजना में 10 मानचित्रों को उत्पन्न करने के लिए सेट किए गए एटलस के साथ एक प्रिंट कंपोजर होता है।

प्रत्येक प्रोजेक्ट के उद्घाटन और संगीतकार एटलस का उपयोग करके पीडीएफ बनाने का सबसे आसान तरीका क्या है?

(कुछ इस तरह से आदर्श होगा - यकीन नहीं है कि यह संभव है)

C: \ OSGeo4W \ bin \ qgis.bat --project MyProject1.qgs --code SaveAtlasAsPdf.py C: \ OSGeo4W \ bin \ qgis.bat --propro 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()

यह सभी कंपोज़र्स को लूप करेगा और उन्हें प्रिंट करेगा यदि उनके पास प्रत्येक के लिए एक पीडीएफ में एटलस सक्षम है।

नोट आप 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()

प्रासंगिक पोस्ट और शानदार जवाब!
कार्टोस

मुझे लगता है यह काम करेगा? जब आप sys.exit()QGIS को बंद करने के लिए उपयोग कर सकते हैं ।
नाथन डब्ल्यू

हां, यह पूरी तरह से काम करता है। मैं वास्तव में बाहर निकलने का रास्ता खोजने की कोशिश कर रहा था । मैंने iface.actionExit ()। ट्रिगर () और sys.exit () की कोशिश की लेकिन किसी कारण से वे काम नहीं कर रहे हैं।
डेमियन

कोशिश करेंQgsApplication.exit()
नाथन डब्ल्यू

iface.actionExit()यदि परियोजना बदल गई है और बाहर निकलने को अवरुद्ध करता है, तो एक संवाद दिखाने जा रहा है, बनाम QgsApplication.exit()जो सिर्फ प्रक्रिया को उलझा देगा।
नाथन डब्ल्यू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.