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 = {
|
||||
"Format_1": {
|
||||
"font_family": "Arial",
|
||||
"font_size": 12,
|
||||
"font_family": "New Helvetica roman",
|
||||
"font_size": 10,
|
||||
"font_style": "normal",
|
||||
},
|
||||
"Format_2": {
|
||||
"font_family": "Arial",
|
||||
"font_size": 12,
|
||||
"font_family": "New Helvetica roman",
|
||||
"font_size": 14,
|
||||
"font_style": "fett",
|
||||
},
|
||||
"Format_3": {
|
||||
"font_family": "Arial",
|
||||
"font_family": "New Helvetica roman",
|
||||
"font_size": 10,
|
||||
"font_style": "normal",
|
||||
},
|
||||
@@ -62,6 +62,8 @@ class Layout:
|
||||
"id": "Textfeld",
|
||||
"size_mm": (60.0, 8.0),
|
||||
"format": "Format_1",
|
||||
"html_mode": True,
|
||||
"text": "",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -80,6 +82,7 @@ class Layout:
|
||||
|
||||
def __init__(self, project: Any | None = None) -> None:
|
||||
self.project = project or QgsProject.instance()
|
||||
self._current_layout: Any | None = None
|
||||
|
||||
def _create_map_item(
|
||||
self,
|
||||
@@ -98,6 +101,86 @@ class Layout:
|
||||
map_item.attemptResize(QgsLayoutSize(width_mm, height_mm, MM))
|
||||
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(
|
||||
self,
|
||||
layout: Any,
|
||||
@@ -186,6 +269,7 @@ class Layout:
|
||||
layout = QgsPrintLayout(self.project)
|
||||
layout.initializeDefaults()
|
||||
layout.setName(name)
|
||||
self._current_layout = layout
|
||||
print(f"[Layout] QgsPrintLayout erstellt: {layout!r}")
|
||||
|
||||
page = layout.pageCollection().page(0)
|
||||
@@ -196,6 +280,7 @@ class Layout:
|
||||
map_top_mm = 10.0
|
||||
map_right_mm = map_left_mm + map_width_mm
|
||||
map_bottom_mm = map_top_mm + map_height_mm
|
||||
kartenfenster_untere_rechte_ecke_mm = (map_right_mm, map_bottom_mm)
|
||||
print(
|
||||
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] Hauptkarte vollständig konfiguriert")
|
||||
|
||||
self._setup_layout_objects(kartenfenster_untere_rechte_ecke_mm, is_atlas=False)
|
||||
|
||||
#Kartenschild-Box
|
||||
|
||||
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_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-Linien
|
||||
|
||||
#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)
|
||||
print("[Layout] Layout zum LayoutManager hinzugefügt")
|
||||
self._current_layout = None
|
||||
open_layout_designer(layout)
|
||||
print("[Layout] Layout Designer geöffnet")
|
||||
return layout
|
||||
@@ -339,6 +439,7 @@ class Layout:
|
||||
layout = QgsPrintLayout(self.project)
|
||||
layout.initializeDefaults()
|
||||
layout.setName(name)
|
||||
self._current_layout = layout
|
||||
|
||||
page = layout.pageCollection().page(0)
|
||||
page.setPageSize(QgsLayoutSize(page_width_mm, page_height_mm, MM))
|
||||
@@ -355,6 +456,7 @@ class Layout:
|
||||
map_top_mm = 10.0
|
||||
map_right_mm = map_left_mm + map_width_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(
|
||||
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.
|
||||
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")
|
||||
|
||||
self._create_label_item(
|
||||
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,
|
||||
)
|
||||
|
||||
self._setup_layout_objects(kartenfenster_untere_rechte_ecke_mm, is_atlas=True)
|
||||
|
||||
atlas = layout.atlas()
|
||||
if atlas is not None:
|
||||
@@ -520,5 +606,8 @@ class Layout:
|
||||
set_page_name("attribute(@atlas_feature, 'Seitenzahl')")
|
||||
|
||||
layout_manager.addLayout(layout)
|
||||
print("[Layout] Layout zum LayoutManager hinzugefügt")
|
||||
self._current_layout = None
|
||||
open_layout_designer(layout)
|
||||
print("[Layout] Layout Designer geöffnet")
|
||||
return layout
|
||||
|
||||
@@ -53,7 +53,6 @@ DIN_GROESSEN: dict[str, tuple[int, int]] = {
|
||||
"DIN A1": (594, 841),
|
||||
"DIN A2": (420, 594),
|
||||
"DIN A3": (297, 420),
|
||||
"DIN A4": (210, 297),
|
||||
}
|
||||
DIN_STANDARD = "DIN A0"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user