A4 als Option entfernt, Objektergänzung im Layout als Einzeiler angelegt
This commit is contained in:
+127
-38
@@ -28,17 +28,17 @@ class Layout:
|
|||||||
|
|
||||||
_TEXT_FORMAT_TEMPLATES = {
|
_TEXT_FORMAT_TEMPLATES = {
|
||||||
"Format_1": {
|
"Format_1": {
|
||||||
"font_family": "Arial",
|
"font_family": "New Helvetica roman",
|
||||||
"font_size": 12,
|
"font_size": 10,
|
||||||
"font_style": "normal",
|
"font_style": "normal",
|
||||||
},
|
},
|
||||||
"Format_2": {
|
"Format_2": {
|
||||||
"font_family": "Arial",
|
"font_family": "New Helvetica roman",
|
||||||
"font_size": 12,
|
"font_size": 14,
|
||||||
"font_style": "fett",
|
"font_style": "fett",
|
||||||
},
|
},
|
||||||
"Format_3": {
|
"Format_3": {
|
||||||
"font_family": "Arial",
|
"font_family": "New Helvetica roman",
|
||||||
"font_size": 10,
|
"font_size": 10,
|
||||||
"font_style": "normal",
|
"font_style": "normal",
|
||||||
},
|
},
|
||||||
@@ -62,6 +62,8 @@ class Layout:
|
|||||||
"id": "Textfeld",
|
"id": "Textfeld",
|
||||||
"size_mm": (60.0, 8.0),
|
"size_mm": (60.0, 8.0),
|
||||||
"format": "Format_1",
|
"format": "Format_1",
|
||||||
|
"html_mode": True,
|
||||||
|
"text": "",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,6 +82,7 @@ class Layout:
|
|||||||
|
|
||||||
def __init__(self, project: Any | None = None) -> None:
|
def __init__(self, project: Any | None = None) -> None:
|
||||||
self.project = project or QgsProject.instance()
|
self.project = project or QgsProject.instance()
|
||||||
|
self._current_layout: Any | None = None
|
||||||
|
|
||||||
def _create_map_item(
|
def _create_map_item(
|
||||||
self,
|
self,
|
||||||
@@ -98,6 +101,86 @@ class Layout:
|
|||||||
map_item.attemptResize(QgsLayoutSize(width_mm, height_mm, MM))
|
map_item.attemptResize(QgsLayoutSize(width_mm, height_mm, MM))
|
||||||
return map_item
|
return map_item
|
||||||
|
|
||||||
|
def add_text_label(
|
||||||
|
self,
|
||||||
|
text: str,
|
||||||
|
x_mm: float,
|
||||||
|
y_mm: float,
|
||||||
|
template_name: str = "textfeld",
|
||||||
|
text_format: str | None = None,
|
||||||
|
width_mm: float | None = None,
|
||||||
|
height_mm: float | None = None,
|
||||||
|
html_mode: bool = False,
|
||||||
|
expression_enabled: bool = False,
|
||||||
|
) -> Any:
|
||||||
|
"""Einfache öffentliche Methode zum Hinzufügen eines Text-Labels.
|
||||||
|
|
||||||
|
Beispiel: add_text_label("Ausgabedatum: 2026-03-23", 100, 200, text_format="Format_1")
|
||||||
|
"""
|
||||||
|
if self._current_layout is None:
|
||||||
|
raise RuntimeError("Kein Layout aktiv. Bitte create_single_page_layout() oder create_atlas_layout() aufrufen.")
|
||||||
|
return self._create_label_item(
|
||||||
|
self._current_layout,
|
||||||
|
template_name,
|
||||||
|
text,
|
||||||
|
x_mm,
|
||||||
|
y_mm,
|
||||||
|
text_format=text_format,
|
||||||
|
width_mm=width_mm,
|
||||||
|
height_mm=height_mm,
|
||||||
|
html_mode=html_mode,
|
||||||
|
expression_enabled=expression_enabled,
|
||||||
|
)
|
||||||
|
|
||||||
|
def _setup_layout_objects(self, kartenfenster_untere_rechte_ecke_mm: tuple, is_atlas: bool = False) -> None:
|
||||||
|
"""Zentrale Methode zum Hinzufügen aller Standard-Objekte ins Layout.
|
||||||
|
|
||||||
|
Diese Methode wird sowohl von create_single_page_layout() als auch von create_atlas_layout() aufgerufen.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
kartenfenster_untere_rechte_ecke_mm: Tupel (x_mm, y_mm) der unteren rechten Kartenecke
|
||||||
|
is_atlas: True für Atlas-Layout, False für Einzelblatt-Layout
|
||||||
|
"""
|
||||||
|
if self._current_layout is None:
|
||||||
|
raise RuntimeError("Kein Layout aktiv.")
|
||||||
|
|
||||||
|
mode_html = getattr(QgsLayoutItemLabel, "ModeHtml", None)
|
||||||
|
print(f"[Layout] QgsLayoutItemLabel.ModeHtml={mode_html!r}")
|
||||||
|
lower_left = getattr(getattr(QgsLayoutItem, "ReferencePoint", object), "LowerLeft", None)
|
||||||
|
print(f"[Layout] QgsLayoutItem.ReferencePoint.LowerLeft={lower_left!r}")
|
||||||
|
|
||||||
|
# Quellenangabe: unterschiedliche Positionen für Einzelblatt vs. Atlas
|
||||||
|
if is_atlas:
|
||||||
|
quellenangabe_x = kartenfenster_untere_rechte_ecke_mm[0] + 5.0
|
||||||
|
quellenangabe_y = kartenfenster_untere_rechte_ecke_mm[1]
|
||||||
|
else:
|
||||||
|
quellenangabe_x = kartenfenster_untere_rechte_ecke_mm[0] + 10.0
|
||||||
|
quellenangabe_y = kartenfenster_untere_rechte_ecke_mm[1] - 120.0
|
||||||
|
|
||||||
|
self._create_label_item(
|
||||||
|
self._current_layout,
|
||||||
|
"quellenangabe",
|
||||||
|
self._QUELLENANGABE_TEXT,
|
||||||
|
quellenangabe_x,
|
||||||
|
quellenangabe_y,
|
||||||
|
html_mode=True,
|
||||||
|
)
|
||||||
|
print("[Layout] Quellenangabe zum Layout hinzugefügt")
|
||||||
|
|
||||||
|
# Seitenzahl nur bei Atlas-Layout
|
||||||
|
if is_atlas:
|
||||||
|
seitenzahl_x = kartenfenster_untere_rechte_ecke_mm[0] + 5.0
|
||||||
|
seitenzahl_y = kartenfenster_untere_rechte_ecke_mm[1] - 2.0
|
||||||
|
self._create_label_item(
|
||||||
|
self._current_layout,
|
||||||
|
"seitenzahl",
|
||||||
|
self._SEITENZAHL_TEXT,
|
||||||
|
seitenzahl_x,
|
||||||
|
seitenzahl_y,
|
||||||
|
expression_enabled=True,
|
||||||
|
)
|
||||||
|
print("[Layout] Seitenzahl zum Layout hinzugefügt")
|
||||||
|
|
||||||
def _create_label_item(
|
def _create_label_item(
|
||||||
self,
|
self,
|
||||||
layout: Any,
|
layout: Any,
|
||||||
@@ -186,6 +269,7 @@ class Layout:
|
|||||||
layout = QgsPrintLayout(self.project)
|
layout = QgsPrintLayout(self.project)
|
||||||
layout.initializeDefaults()
|
layout.initializeDefaults()
|
||||||
layout.setName(name)
|
layout.setName(name)
|
||||||
|
self._current_layout = layout
|
||||||
print(f"[Layout] QgsPrintLayout erstellt: {layout!r}")
|
print(f"[Layout] QgsPrintLayout erstellt: {layout!r}")
|
||||||
|
|
||||||
page = layout.pageCollection().page(0)
|
page = layout.pageCollection().page(0)
|
||||||
@@ -196,6 +280,7 @@ class Layout:
|
|||||||
map_top_mm = 10.0
|
map_top_mm = 10.0
|
||||||
map_right_mm = map_left_mm + map_width_mm
|
map_right_mm = map_left_mm + map_width_mm
|
||||||
map_bottom_mm = map_top_mm + map_height_mm
|
map_bottom_mm = map_top_mm + map_height_mm
|
||||||
|
kartenfenster_untere_rechte_ecke_mm = (map_right_mm, map_bottom_mm)
|
||||||
print(
|
print(
|
||||||
f"[Layout] Kartenbild-Kanten: rechts={map_right_mm:.1f} mm, unten={map_bottom_mm:.1f} mm"
|
f"[Layout] Kartenbild-Kanten: rechts={map_right_mm:.1f} mm, unten={map_bottom_mm:.1f} mm"
|
||||||
)
|
)
|
||||||
@@ -295,25 +380,40 @@ class Layout:
|
|||||||
print(f"[Layout] WARN: setRefreshStrategy fehlgeschlagen: {exc}")
|
print(f"[Layout] WARN: setRefreshStrategy fehlgeschlagen: {exc}")
|
||||||
|
|
||||||
print(f"[Layout] Hauptkarte vollständig konfiguriert")
|
print(f"[Layout] Hauptkarte vollständig konfiguriert")
|
||||||
|
|
||||||
|
self._setup_layout_objects(kartenfenster_untere_rechte_ecke_mm, is_atlas=False)
|
||||||
|
|
||||||
|
#Kartenschild-Box
|
||||||
|
|
||||||
mode_html = getattr(QgsLayoutItemLabel, "ModeHtml", None)
|
#Kartenschild-Linien
|
||||||
print(f"[Layout] QgsLayoutItemLabel.ModeHtml={mode_html!r}")
|
|
||||||
lower_left = getattr(getattr(QgsLayoutItem, "ReferencePoint", object), "LowerLeft", None)
|
|
||||||
print(f"[Layout] QgsLayoutItem.ReferencePoint.LowerLeft={lower_left!r}")
|
|
||||||
quellenangabe_x_mm = map_right_mm + 20.0
|
|
||||||
quellenangabe_y_mm = map_bottom_mm - 120.0
|
|
||||||
self._create_label_item(
|
|
||||||
layout,
|
|
||||||
"quellenangabe",
|
|
||||||
self._QUELLENANGABE_TEXT,
|
|
||||||
quellenangabe_x_mm,
|
|
||||||
quellenangabe_y_mm,
|
|
||||||
html_mode=True,
|
|
||||||
)
|
|
||||||
print("[Layout] Quellenangabe zum Layout hinzugefügt")
|
|
||||||
|
|
||||||
|
#Kartenschild-Text
|
||||||
|
#Herausgeber
|
||||||
|
|
||||||
|
#Bezeichnung_Flurbereinigung
|
||||||
|
|
||||||
|
#Name Flurbereinigung
|
||||||
|
|
||||||
|
#Stadt_Gemeinde
|
||||||
|
|
||||||
|
#Landkreis
|
||||||
|
|
||||||
|
#Kartenname
|
||||||
|
|
||||||
|
#Ergänzung(Seitenzahl)
|
||||||
|
|
||||||
|
#gefertigt
|
||||||
|
|
||||||
|
#geprüft
|
||||||
|
|
||||||
|
#Maßstab
|
||||||
|
|
||||||
|
#Ausgabedatum
|
||||||
|
|
||||||
|
#Aktenzeichen
|
||||||
layout_manager.addLayout(layout)
|
layout_manager.addLayout(layout)
|
||||||
print("[Layout] Layout zum LayoutManager hinzugefügt")
|
print("[Layout] Layout zum LayoutManager hinzugefügt")
|
||||||
|
self._current_layout = None
|
||||||
open_layout_designer(layout)
|
open_layout_designer(layout)
|
||||||
print("[Layout] Layout Designer geöffnet")
|
print("[Layout] Layout Designer geöffnet")
|
||||||
return layout
|
return layout
|
||||||
@@ -339,6 +439,7 @@ class Layout:
|
|||||||
layout = QgsPrintLayout(self.project)
|
layout = QgsPrintLayout(self.project)
|
||||||
layout.initializeDefaults()
|
layout.initializeDefaults()
|
||||||
layout.setName(name)
|
layout.setName(name)
|
||||||
|
self._current_layout = layout
|
||||||
|
|
||||||
page = layout.pageCollection().page(0)
|
page = layout.pageCollection().page(0)
|
||||||
page.setPageSize(QgsLayoutSize(page_width_mm, page_height_mm, MM))
|
page.setPageSize(QgsLayoutSize(page_width_mm, page_height_mm, MM))
|
||||||
@@ -355,6 +456,7 @@ class Layout:
|
|||||||
map_top_mm = 10.0
|
map_top_mm = 10.0
|
||||||
map_right_mm = map_left_mm + map_width_mm
|
map_right_mm = map_left_mm + map_width_mm
|
||||||
map_bottom_mm = map_top_mm + map_height_mm
|
map_bottom_mm = map_top_mm + map_height_mm
|
||||||
|
kartenfenster_untere_rechte_ecke_mm = (map_right_mm, map_bottom_mm)
|
||||||
|
|
||||||
hauptkarte = self._create_map_item(
|
hauptkarte = self._create_map_item(
|
||||||
layout,
|
layout,
|
||||||
@@ -481,24 +583,8 @@ class Layout:
|
|||||||
# Sicherheit: Größe nochmal nach Atlas-Konfiguration setzen, um sicherzustellen, dass sie nicht von der Atlas-Einstellung überschrieben wurde.
|
# Sicherheit: Größe nochmal nach Atlas-Konfiguration setzen, um sicherzustellen, dass sie nicht von der Atlas-Einstellung überschrieben wurde.
|
||||||
hauptkarte.attemptResize(QgsLayoutSize(map_width_mm, map_height_mm, MM))
|
hauptkarte.attemptResize(QgsLayoutSize(map_width_mm, map_height_mm, MM))
|
||||||
print(f"[Layout] Atlas Hauptkarte Größe nach Atlas-Konfiguration erneut gesetzt: {map_width_mm:.1f}mm × {map_height_mm:.1f}mm")
|
print(f"[Layout] Atlas Hauptkarte Größe nach Atlas-Konfiguration erneut gesetzt: {map_width_mm:.1f}mm × {map_height_mm:.1f}mm")
|
||||||
|
|
||||||
self._create_label_item(
|
self._setup_layout_objects(kartenfenster_untere_rechte_ecke_mm, is_atlas=True)
|
||||||
layout,
|
|
||||||
"quellenangabe",
|
|
||||||
self._QUELLENANGABE_TEXT,
|
|
||||||
map_right_mm + 5.0,
|
|
||||||
map_bottom_mm,
|
|
||||||
html_mode=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
self._create_label_item(
|
|
||||||
layout,
|
|
||||||
"seitenzahl",
|
|
||||||
self._SEITENZAHL_TEXT,
|
|
||||||
map_right_mm + 5.0,
|
|
||||||
map_bottom_mm - 2.0,
|
|
||||||
expression_enabled=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
atlas = layout.atlas()
|
atlas = layout.atlas()
|
||||||
if atlas is not None:
|
if atlas is not None:
|
||||||
@@ -520,5 +606,8 @@ class Layout:
|
|||||||
set_page_name("attribute(@atlas_feature, 'Seitenzahl')")
|
set_page_name("attribute(@atlas_feature, 'Seitenzahl')")
|
||||||
|
|
||||||
layout_manager.addLayout(layout)
|
layout_manager.addLayout(layout)
|
||||||
|
print("[Layout] Layout zum LayoutManager hinzugefügt")
|
||||||
|
self._current_layout = None
|
||||||
open_layout_designer(layout)
|
open_layout_designer(layout)
|
||||||
|
print("[Layout] Layout Designer geöffnet")
|
||||||
return layout
|
return layout
|
||||||
|
|||||||
@@ -53,7 +53,6 @@ DIN_GROESSEN: dict[str, tuple[int, int]] = {
|
|||||||
"DIN A1": (594, 841),
|
"DIN A1": (594, 841),
|
||||||
"DIN A2": (420, 594),
|
"DIN A2": (420, 594),
|
||||||
"DIN A3": (297, 420),
|
"DIN A3": (297, 420),
|
||||||
"DIN A4": (210, 297),
|
|
||||||
}
|
}
|
||||||
DIN_STANDARD = "DIN A0"
|
DIN_STANDARD = "DIN A0"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user