การทำการพิมพ์ผู้แต่งโครงการ QGIS โดยอัตโนมัติหรือไม่


9

ฉันมีโครงการขนาดใหญ่ซึ่งประกอบด้วยไฟล์โครงการ QGIS ประมาณ 10 เท่า แต่ละโครงการมีผู้แต่งเพลงพร้อมด้วยแผนที่ตั้งค่าเพื่อสร้างแผนที่ได้สูงสุด 10 แผนที่

วิธีที่ง่ายที่สุดในการเปิดแต่ละโครงการโดยอัตโนมัติและสร้าง PDF โดยใช้แอทลาสผู้แต่งคืออะไร

(บางอย่างเช่นนี้จะเหมาะ - ไม่แน่ใจว่าเป็นไปได้)

C: \ OSGeo4W \ bin \ qgis.bat - โครงการ MyProject1.qgs - รหัส SaveAtlasAsPdf.py C: \ OSGeo4W \ bin \ qgis.bat - โครงการ MyProject2.qgs - รหัส SaveAtlasAsPdf.py

คำตอบ:


9

บันทึกสิ่งนี้ในไฟล์ Python และใช้มันใน --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 เมื่อเสร็จแล้ว
นาธาน W

ใช่มันทำงานได้อย่างสมบูรณ์ จริง ๆ แล้วฉันก็พยายามหาทางออก ฉันลอง iface.actionExit (). trigger () และ sys.exit () แต่ด้วยเหตุผลบางอย่างพวกเขาไม่ทำงาน
ดาเมียน

ลองQgsApplication.exit()
นาธาน W

iface.actionExit()กำลังจะแสดงกล่องโต้ตอบหากโครงการมีการเปลี่ยนแปลงและปิดกั้นทางออกQgsApplication.exit()ซึ่งจะทำให้กระบวนการ
นาธาน W
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.