diff --git a/00-lezing/lezing-wat-is-een-ai-agent.pptx b/00-lezing/lezing-wat-is-een-ai-agent.pptx index 9511c9e..bc7c048 100644 Binary files a/00-lezing/lezing-wat-is-een-ai-agent.pptx and b/00-lezing/lezing-wat-is-een-ai-agent.pptx differ diff --git a/00-sessie/sessie-agents-en-projecten.pptx b/00-sessie/sessie-agents-en-projecten.pptx index 588218e..8ecacb7 100644 Binary files a/00-sessie/sessie-agents-en-projecten.pptx and b/00-sessie/sessie-agents-en-projecten.pptx differ diff --git a/_gereedschap/maak_pptx.py b/_gereedschap/maak_pptx.py index b669fd5..2de6ad3 100644 --- a/_gereedschap/maak_pptx.py +++ b/_gereedschap/maak_pptx.py @@ -18,6 +18,7 @@ Vereist: pdftoppm (Poppler) en python-pptx. """ import json import re +import zipfile import subprocess import sys import tempfile @@ -112,7 +113,36 @@ for n, sid in enumerate(deck["order"]): uit = pdf.with_suffix(".pptx") prs.save(str(uit)) + +def repareer_notitiemaster(pad: Path) -> bool: + """python-pptx schrijft de notitiemaster wel als onderdeel, maar noemt hem niet in + presentation.xml. PowerPoint laat de notities dan weg. Deze reparatie zet de ontbrekende + regel erin, op de plek die het schema voorschrijft: direct na de dia-master.""" + with zipfile.ZipFile(pad) as bron: + pres = bron.read("ppt/presentation.xml").decode("utf-8") + if "notesMasterIdLst" in pres: + return False + rels = bron.read("ppt/_rels/presentation.xml.rels").decode("utf-8") + m = re.search(r'Id="([^"]+)"[^>]*notesMaster[^>]*/>', rels) + if not m: + return False + pres = pres.replace( + "", + f'' + f"", 1) + onderdelen = [(i, bron.read(i.filename)) for i in bron.infolist()] + tijdelijk = pad.with_suffix(".tmp") + with zipfile.ZipFile(tijdelijk, "w", zipfile.ZIP_DEFLATED) as nieuw_zip: + for info, data in onderdelen: + nieuw_zip.writestr(info, pres.encode("utf-8") if info.filename == "ppt/presentation.xml" else data) + tijdelijk.replace(pad) + return True + + +gerepareerd = repareer_notitiemaster(uit) + # 4. de dia-bestanden terugzetten op de publieke versie subprocess.run([sys.executable, str(MAP / "maak_dias.py")], check=True, capture_output=True) soort = "uitgebreide begeleidersnotities (privé, niet delen)" if PRIVE else "de notities uit de dia's" -print(f"{uit.name}: {uit.stat().st_size // 1024} kB, {len(deck['order'])} dia's, met {soort}") +print(f"{uit.name}: {uit.stat().st_size // 1024} kB, {len(deck['order'])} dia's, met {soort}" + + (", notitiemaster toegevoegd" if gerepareerd else ""))