¶Ô±ÈÐÂÎļþ |
| | |
| | | #!/usr/bin/env |
| | | # -*- coding: utf-8 -*- |
| | | import os |
| | | 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 get_full_path(): |
| | | return os.path.split(sys.argv[0])[0] |
| | | |
| | | |
| | | # è·ååæ° |
| | | 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) |
| | | |
| | | return parser.parse_args() |
| | | |
| | | |
| | | # 设置å¾å±å¯ç¨æ§ |
| | | 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) |
| | | layer.setValid(flag) |
| | | |
| | | |
| | | # 设置å¾å±å¯è§æ§ |
| | | def set_item_visibility(root_node, show_layers): |
| | | print(root_node.name() + ': Group') |
| | | for node in root_node.children(): |
| | | # QgsLayerTreeLayer |
| | | if isinstance(node, QgsLayerTreeGroup): |
| | | 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_node.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 = get_args() |
| | | project = QgsProject.instance() |
| | | # project.read(r'Test.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(os.path.join(args.src, 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() |
| | | 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() |
| | | # set_layers_valid(project, showLayers) |
| | | set_item_visibility(root, showLayers) |
| | | |
| | | # sm = layout.itemById(r'说æ') |
| | | table = layout.multiFrames()[0] |
| | | contents = table.tableContents() |
| | | contents[1][1] = scale |
| | | table.refreshAttributes() |
| | | 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() |