diff --git a/docs/05-ki.md b/docs/05-ki.md index 7dfe0ef..5d95011 100644 --- a/docs/05-ki.md +++ b/docs/05-ki.md @@ -81,6 +81,41 @@ Kontakt (`icon_contacts.cv_file`) und lässt sich aus dessen Karte herunterladen der Download läuft über `fetch` mit Bearer-Kopf, ein normaler Link schickt ihn nicht mit. +### Das Bewerbungsfoto + +Trägt der Lebenslauf ein Portrait, wird es beim Auslesen mit herausgeholt und im +Screening-Formular oben angezeigt – mit Haken, standardmäßig gesetzt. Beim +Übernehmen landet es als Foto am Kontakt. + +Gefunden wird es **ohne zusätzliches Paket** (`server/src/cvPhoto.js`): + +| Format | Weg | +| --- | --- | +| DOCX | ist ein ZIP – die Dateien unter `word/media/` werden mit dem eingebauten `zlib` herausgelöst | +| PDF | mit `/DCTDecode` abgelegte JPEGs stehen unverändert in der Datei und lassen sich an ihren eigenen Markierungen (FFD8 … FFD9) ausschneiden | + +Bilder in anderen PDF-Kodierungen (FlateDecode, also rohe Bitmaps) bleiben außen +vor: sie müssten neu kodiert werden, und dafür bräuchte es eine Bildbibliothek +auf dem Server. + +**Welches Bild das Portrait ist**, entscheidet die Form – die Reihenfolge in der +Datei hilft nicht, in DOCX steht das Firmenlogo oft vor dem Foto: + +* kleiner als 100 × 100 px → Symbol, Trennlinie, Aufzählungszeichen +* Seitenverhältnis außerhalb 0,4–1,6 → Kopfzeile, Banner, Diagramm +* vom Rest gewinnt **Hochformat** vor Querformat, dann das größere + +Verkleinert wird im Browser, über denselben Weg wie jedes andere Foto +(`src/lib/imageCompress.ts`): mittiger Ausschnitt, 400 px im Quadrat, WebP – und +eine harte Obergrenze von **512 kB**, unter die notfalls die Kantenlänge +schrittweise fällt. In der Praxis liegt ein Ergebnis bei 20–60 kB; die Grenze +ist die Zusicherung, nicht die Regel. + +Das gefundene Bild liegt bis zur Übernahme in `icon_cv_imports.photo` und wird +danach dort geleert – sonst stünde dasselbe Foto zweimal in der Datenbank. In +der Liste der Importe steht es **nicht**: sie trägt nur `has_photo`, das Bild +holt das Formular einzeln (`GET /api/cvs/:id/photo`). + ## Schreibhilfe für Ausschreibungen Das Feld *Ausschreibungstext* (`icon_tenders.notes`) ist ein WYSIWYG-Editor mit