PDF-Layout: Entscheidungsüberblick und Pflichttexte
Stand: 5. September 2026. Issue #558.
Basis: 834d1422c19975bd91b140fcdb443ecbfcd20eca.
Vertrag und Änderung
Im öffentlichen React-PDF-Renderer stehen die 15-pt-Kennzahl und die vollständige 9,2-pt-Erklärung in eigenen Textblöcken. Dadurch beeinflusst die größere Zahl nicht mehr den Zeilenvorschub der mehrzeiligen Erklärung. Die Karten wachsen mit ihrem Inhalt. Die Ampelberechnung und gespeicherten Daten ändern sich nicht.
Die Altlastenzeile liegt für die Paginierung direkt neben ihrem Pflichttext.
minPresenceAhead=36 hält dessen Beginn bei der Ergebniszeile, während lange
Hinweise weiter umbrechen dürfen. Eine verschachtelte Gruppe würde diesen
Umbruchschutz am ersten Kind wirkungslos machen. Ein untrennbarer Gesamtblock
würde dagegen sehr lange Hinweise über den Seitenrand hinauszeichnen.
Tatsächlich ausgeführtes Rot/Grün
npm run qa:pdf:layout erzeugt ausschließlich synthetische, nicht personenbezogene
Reportdaten ohne Koordinate. Der Test liest die Glyphboxen aus pdftotext -bbox
im finalisierten PDF, erkennt die beiden Karten anhand ihrer sichtbaren Titel
und prüft jede Erklärungszeile gegen die vorherige. Vollständige Labels, die
eindeutig große Kennzahlbox mit eigenem Abstand zur ersten Erklärungszeile und die Platzierung auf der ersten physischen Seite sind Pflicht.
Vor dem Fix wurde derselbe Test mit dem unveränderten Renderer der Basis ausgeführt: vier Zählfälle scheiterten an −4,33 pt Abstand; drei Paginierungsfälle scheiterten am isolierten Hinweisbeginn auf der Folgeseite. Die einzelne Kontrollfixture mit etwas mehr Restplatz bestand bereits vorher. Nach dem Fix bestehen alle acht Fälle. Die Erklärung hat mindestens +1,28 pt Abstand zwischen Poppler-Glyphboxen.
Der ursprüngliche Befund von 2,40 pt Überlappung verwendete nominale 9,2-pt-Schriftboxen. Poppler liefert dagegen fontmetrische Glyphboxen mit rund 11,13 pt Höhe; deshalb ergibt derselbe fehlerhafte Vorschub von rund 6,80 pt hier 4,33 pt Überlappung. Das sind unterschiedliche Boxdefinitionen, keine verschiedenen Fehler. Rot und Grün verwenden ausschließlich dieselbe Poppler-Methode und denselben Mindestabstand von 0,5 pt.
| Synthetischer Fall | Prüfung |
|---|---|
| 0 kritische / 0 gelbe | Vollständige Nullbefundaussagen, mehrzeilige Erklärung |
| 1 / 1 mit langem Label | Beide Karten und vollständige Beschriftung |
| 5 / 5 | Mehrere Labels, gleiche Geometriegrenze |
| 10 / 10 mit langen Labels | 16 Erklärungszeilen pro Karte, keine Kürzung |
| Seitenrand 52 / 53 / 54 | Kurzer Pflichttext beginnt bei Altlastenzeile |
| Seitenrand 53, 80 Pflichttextsätze | Sechs Seiten, alle 80 Aussagen und Schlussmarker erhalten |
Alle Seiten dieser acht Dateien werden zusätzlich mit pdftoppm und
pdftocairo gerendert und auf Seitenränder, Dunkelflächen und sichtbaren
Seitenkörper geprüft. Native Chrome/PDFium 148.0.7778.96 hat dieselben acht
finalen Dateien auf allen 33 Seiten gerendert; Überblick und Seitenübergänge
wurden zusätzlich visuell geprüft. Das bestehende Free-/Premium-Harness bleibt unverändert:
3/4 Seiten, Datenmarker, Metadaten, Sprache, Linkobjekte und lückenlose
Seitenzahlen. Der Pflichtjob PDF-Poppler-Regression führt beide Harnesses aus.
Der ergänzte Kennzahltest identifiziert genau eine große Ziffernbox pro Karte und prüft ihren Abstand zur ersten Erklärungszeile separat; eine Zahl innerhalb eines Labels kann diese Prüfung nicht erfüllen. Der gemessene Abstand beträgt 5,10 pt.
Abnahme und Releasebindung
Lokal bestanden die bestehenden 65 gezielten PDF-/Risiko-/Poppler-Tests,
3.607 Tests der Gesamtsuite (43 umgebungsbedingt übersprungen), Typecheck und
Lint. npm run build bestand mit einer unbenutzten lokalen PostgreSQL-
Platzhalter-URL: Das ist ausschließlich Build-Konfiguration, kein
Datenbankfunktionsnachweis. Der echte Vercel-Build wird separat geprüft. Beide Poppler-Backends zeigen bei der Sichtprüfung getrennte Kennzahlen,
lesbare Erklärungen und vollständig begrenzte Karten.
Der finale PR bindet Head-SHA, vollständige CI, tatsächlich gebauten Preview, native Chrome/PDFium-Abnahme sowie die vorhandenen Schul- und Nähe-Referenzen. Nach konkreter PM-Freigabe werden Merge-SHA, vollständige Main-CI, exaktes Produktionsdeployment und erneuter Live-PDF-Readback in der verlinkten Issue-/PR-Evidence ergänzt. Diese noch ausstehenden Releasegates sind durch lokale Tests nicht ersetzt.
Private Referenz-JSONs, PDFs, vollständige Viewer-Screenshots und Report-IDs werden nicht eingecheckt. Referenzabrufe verwenden vorhandene Reports; es werden keine neuen Nutzerreports angelegt. Veröffentlichte Evidence enthält nur redigierte Befunde, Hashes und capabilityfreie Ausschnitte. PDF/UA #333 und mobiler Scope #557 bleiben getrennt.