From 5f80de49c4a00416591054180bf809a12a76d686 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期四, 07 十一月 2024 16:40:53 +0800 Subject: [PATCH] 1 --- ExportMap/Sources/render.py | 80 ++++++++++++++++++++++++++++++--------- 1 files changed, 61 insertions(+), 19 deletions(-) diff --git a/ExportMap/Sources/render.py b/ExportMap/Sources/render.py index 66a5acc..9761125 100644 --- a/ExportMap/Sources/render.py +++ b/ExportMap/Sources/render.py @@ -1,5 +1,6 @@ #!/usr/bin/env # -*- coding: utf-8 -*- +import os import sys import math import argparse @@ -11,11 +12,16 @@ from qgis.PyQt.QtXml import * +# 鑾峰彇瀹屾暣璺緞 +def get_full_path(): + return os.path.split(sys.argv[0])[0] + + # 鑾峰彇鍙傛暟 -def getArgs(): - argv = sys.argv[1:] - print("argv = ", argv) +def get_args(): + print("argv = ", sys.argv[1:]) parser = argparse.ArgumentParser(description='ArgUtils') + parser.add_argument("-src", type=str, default=get_full_path(), required=False) parser.add_argument("-qgz", type=str, default="Test.qgz", required=False) parser.add_argument("-qpt", type=str, default="Test.qpt", required=False) @@ -23,9 +29,9 @@ # 璁剧疆鍥惧眰鍙敤鎬� -def setLayersValid(project, showLayers): - for layer in project.mapLayers().values(): - flag = layer.name() in showLayers +def set_layers_valid(prj, show_layers): + for layer in prj.mapLayers().values(): + flag = layer.name() in show_layers print(layer.name() + ": " + str(flag)) # if not flag: # project.removeMapLayer(layer) @@ -33,39 +39,42 @@ # 璁剧疆鍥惧眰鍙鎬� -def setItemVisibility(root, showLayers): - print(root.name() + ': Group') - for node in root.children(): +def set_item_visibility(root_node, show_layers): + print(root_node.name() + ': Group') + for node in root_node.children(): # QgsLayerTreeLayer if isinstance(node, QgsLayerTreeGroup): - setItemVisibility(node, showLayers) + set_item_visibility(node, show_layers) # QgsRasterLayer, QgsVectorLayer else: name = node.layer().name() flag = name in showLayers print(name + ": " + str(flag)) # if not flag: - # root.removeLayer(node.layer()) + # root_node.removeLayer(node.layer()) # node.layer().setValid(False) node.setItemVisibilityChecked(flag) +# 鍒濆鍖� # QgsApplication.setPrefixPath(r"E:/terrait/TianJin/LFServer/QGIS/", True) -qgs = QgsApplication([], True) +qgs = QgsApplication([], False) qgs.initQgis() -args = getArgs() +# 鍔犺浇宸ョ▼ +args = get_args() project = QgsProject.instance() # project.read(r'Test.qgz') -project.read(args.qgz) +project.read(os.path.join(args.src, 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: +with open(os.path.join(args.src, args.qpt), 'r', encoding='utf-8') as f: template_content = f.read() doc = QDomDocument() doc.setContent(template_content) @@ -73,21 +82,54 @@ # map = layout.itemById(r'鍦板浘') map = layout.referenceMap() -print('1:' + str(math.ceil(map.scale()))) +map.zoomToExtent(map.extent()) +scale = '1:' + str(math.ceil(map.scale() / 100) * 100) +print(scale) +# template_content = template_content.replace('1锛�25涓�', scale) +# doc.setContent(template_content) +# layout.loadFromTemplate(doc, QgsReadWriteContext(), True) +# map = layout.referenceMap() +# map.zoomToExtent(map.extent()) + +size = map.sizeWithUnits() +print('size: ' + str(size.width()) + " * " + str(size.height()) + " mm") +if size.width() > 280 or size.height() > 174: + map.attemptResize(QgsLayoutSize(280, 174, QgsUnitTypes.LayoutMillimeters)) + print('size: ' + str(map.sizeWithUnits().width()) + " * " + str(map.sizeWithUnits().height()) + " mm") + +# 璁剧疆鍥惧眰 # "闃�瀹�", "绔欏満", "绠¢亾涓績绾�", "鐭㈤噺娉ㄨ", "鐭㈤噺鍥�", "楂樺痉褰卞儚娉ㄨ", "楂樺痉褰卞儚", "褰卞儚娉ㄨ", "褰卞儚鍥�" # showLayers = ["闃�瀹�", "绠¢亾涓績绾�", "鐭㈤噺娉ㄨ", "鐭㈤噺鍥�"] showLayers = layout.customProperty("layers").split(',') root = project.layerTreeRoot() -# setLayersValid(project, showLayers) -setItemVisibility(root, showLayers) +# set_layers_valid(project, showLayers) +set_item_visibility(root, showLayers) -layout.refresh() +# sm = layout.itemById(r'璇存槑') +table = layout.multiFrames()[0] +contents = table.tableContents() +# contents[1][1] = str(scale) +contents[1][1].setContent(scale) +# table.refreshAttributes() +table.setTableContents(contents) +table.refresh() + +# collection = layout.pageCollection() +# page = collection.page(0) +# page.refreshItemSize() + +# 鍒锋柊 map.refresh() +# layout.updateBounds() +layout.renderContext() +layout.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() -- Gitblit v1.9.3