app foldee

This commit is contained in:
marcus.hinz
2026-06-14 12:13:49 +02:00
parent 6d29263392
commit b30e4a7d31
73 changed files with 994 additions and 175 deletions
+76
View File
@@ -0,0 +1,76 @@
#!/usr/bin/env python3
"""Gemeinsames adesso-Styling für die Workshop-Folien.
Teal->Blau-Verlauf, Fira Sans, weiße Shapes + Coral-Akzente,
Header (Pill + Titel) und schlanke Fußzeile (Seitenzahl + adesso)."""
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE
from pptx.oxml.ns import qn
# ---- adesso Palette --------------------------------------------------------
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
INK = RGBColor(0x0E, 0x2A, 0x47) # tiefes Navy Text auf hellen Boxen / dunkle Füllungen
BLUE = RGBColor(0x00, 0x6E, 0xC7)
TEAL = RGBColor(0x28, 0xDC, 0xAA)
GREEN = RGBColor(0x76, 0xC8, 0x00)
CORAL = RGBColor(0xFF, 0x98, 0x68)
PINK = RGBColor(0xF5, 0x66, 0xBA)
TAUPE = RGBColor(0x88, 0x7D, 0x75)
LIGHT = RGBColor(0xD7, 0xE6, 0xF4) # helle, gedämpfte Schrift/Linien auf dem Verlauf
MUTE = RGBColor(0x6B, 0x77, 0x85) # mittleres Grau Text auf weißen Flächen
RECF = RGBColor(0xE6, 0xEF, 0xF8) # helle Kästchen in weißen Boxen
F = "Fira Sans"
FC = "Fira Sans Condensed"
def alpha(shape, opacity_pct):
"""Deckkraft (0-100) auf die Solid-Füllung setzen."""
srgb = shape._element.spPr.find(qn('a:solidFill')).find(qn('a:srgbClr'))
srgb.append(srgb.makeelement(qn('a:alpha'), {'val': str(int(opacity_pct * 1000))}))
def line_alpha(shape, opacity_pct):
ln = shape._element.spPr.find(qn('a:ln'))
srgb = ln.find(qn('a:solidFill')).find(qn('a:srgbClr'))
srgb.append(srgb.makeelement(qn('a:alpha'), {'val': str(int(opacity_pct * 1000))}))
def paint_background(s, width, height):
"""Teal->Blau-Verlauf als Folienhintergrund."""
bgr = s.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, 0, width, height)
bgr.line.fill.background(); bgr.shadow.inherit = False
bgr.fill.gradient()
try:
bgr.fill.gradient_angle = 90.0
except Exception:
pass
st = bgr.fill.gradient_stops
st[0].position = 0.0; st[0].color.rgb = TEAL
st[1].position = 1.0; st[1].color.rgb = BLUE
return bgr
def chrome(s, title, page):
"""Header (Pill + Titel) + schlanke Fußzeile (Seitenzahl + adesso)."""
pill = s.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE,
Inches(0.55), Inches(0.46), Inches(0.5), Inches(0.26))
pill.fill.background(); pill.line.color.rgb = WHITE; pill.line.width = Pt(1.5)
pill.shadow.inherit = False
try: pill.adjustments[0] = 0.5
except Exception: pass
def _t(x, y, w, h, t, size, color, bold=False, align=PP_ALIGN.LEFT, font=FC):
tb = s.shapes.add_textbox(x, y, w, h); tf = tb.text_frame
tf.word_wrap = True; tf.margin_left = tf.margin_right = Pt(0)
tf.margin_top = tf.margin_bottom = Pt(0)
p = tf.paragraphs[0]; p.alignment = align
r = p.add_run(); r.text = t
r.font.size = Pt(size); r.font.bold = bold; r.font.name = font; r.font.color.rgb = color
_t(Inches(1.25), Inches(0.34), Inches(11), Inches(0.7), title, 30, WHITE, bold=True)
_t(Inches(0.55), Inches(7.06), Inches(1.0), Inches(0.3), str(page), 11, LIGHT)
_t(Inches(10.95), Inches(6.99), Inches(1.85), Inches(0.4), "adesso", 17, WHITE,
bold=True, align=PP_ALIGN.RIGHT)