#!/usr/bin/env # -*- coding: utf-8 -*- import sys import math import argparse from qgis.core import * from qgis.gui import * from qgis.PyQt.QtGui import * from qgis.PyQt.QtCore import * from qgis.PyQt.QtWidgets import * from qgis.PyQt.QtXml import * # 获取参数 def getArgs(): argv = sys.argv[1:] print("argv = ", argv) parser = argparse.ArgumentParser(description='ArgUtils') parser.add_argument("-qgz", type=str, default="Test.qgz", required=False) parser.add_argument("-qpt", type=str, default="Test.qpt", required=False) return parser.parse_args() # 设置图层可用性 def setLayersValid(project, showLayers): for layer in project.mapLayers().values(): flag = layer.name() in showLayers print(layer.name() + ": " + str(flag)) # if not flag: # project.removeMapLayer(layer) layer.setValid(flag) # 设置图层可见性 def setItemVisibility(root, showLayers): print(root.name() + ': Group') for node in root.children(): # QgsLayerTreeLayer if isinstance(node, QgsLayerTreeGroup): setItemVisibility(node, showLayers) # QgsRasterLayer, QgsVectorLayer else: name = node.layer().name() flag = name in showLayers print(name + ": " + str(flag)) # if not flag: # root.removeLayer(node.layer()) # node.layer().setValid(False) node.setItemVisibilityChecked(flag) # QgsApplication.setPrefixPath(r"E:/terrait/TianJin/LFServer/QGIS/", True) qgs = QgsApplication([], True) qgs.initQgis() args = getArgs() project = QgsProject.instance() # project.read(r'Test.qgz') project.read(args.qgz) print("FileName: " + project.fileName()) # layout = QgsPrintLayout(project) layout = QgsLayout(project) # layout.initializeDefaults() # with open(r'Test.qpt', 'r', encoding='utf-8') as f: with open(args.qpt, 'r', encoding='utf-8') as f: template_content = f.read() doc = QDomDocument() doc.setContent(template_content) layout.loadFromTemplate(doc, QgsReadWriteContext(), True) # map = layout.itemById(r'地图') map = layout.referenceMap() print('1:' + str(math.ceil(map.scale()))) # "阀室", "站场", "管道中心线", "矢量注记", "矢量图", "高德影像注记", "高德影像", "影像注记", "影像图" # showLayers = ["阀室", "管道中心线", "矢量注记", "矢量图"] showLayers = layout.customProperty("layers").split(',') root = project.layerTreeRoot() # setLayersValid(project, showLayers) setItemVisibility(root, showLayers) layout.refresh() map.refresh() exporter = QgsLayoutExporter(layout) # img_path = os.path.join(r"E:/terrait/TianJin/LFServer/QGIS", "render.png") img_path = layout.customProperty("imgPath") exporter.exportToImage(img_path, QgsLayoutExporter.ImageExportSettings()) qgs.exitQgis()