app foldee
This commit is contained in:
@@ -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)
|
||||
Reference in New Issue
Block a user