{{-- Modulo S-13-I — Registrazione delle assegnazioni del territorio. Ricostruzione fedele del modulo ufficiale, la cui copia è in resources/pdf/S-13_I.pdf e va usata come matrice per qualsiasi modifica alla griglia. Il modulo originale è un PDF 1.7 con font CID embeddati: sovrapporvi testo richiederebbe il parser a pagamento di FPDI, mentre dompdf è già in uso per gli altri export del progetto. Struttura per pagina: 21 blocchi-territorio, ognuno su due righe — quella alta ospita i nomi dei proclamatori, quella bassa le date. Le colonne "Terr. N." e "Restituito l'ultima volta il" occupano entrambe le righe. Il motore CSS di dompdf non è un browser: le larghezze stanno in (con i soli colspan sarebbero ripartite a caso) e l'interruzione di pagina è decisa dall'indice del ciclo, perché il supporto a :last-child non è garantito e un foglio bianco in coda sarebbe visibile. --}} @php /** * I nomi devono entrare nella loro cella senza sfondare la griglia: le * righe hanno altezza fissa, quindi una riga di troppo sballerebbe tutto * il foglio. Invece di andare a capo si scala il corpo. * * La larghezza si stima a caratteri: 0.20mm per carattere per punto di * corpo. È deliberatamente pessimistica — la media reale di DejaVu Sans è * ~0.52em (0.1835mm), ma sui nomi propri, pieni di maiuscole, la media non * regge e con zero margine il testo deborda dalla cella. Sotto i 4.5pt il * testo non sarebbe più leggibile, quindi oltre quel limite si tronca: * l'ellissi rende visibile l'accorciamento, mentre un nome che deborda * corromperebbe la griglia in silenzio. * * La larghezza qui sotto è misurata sul PDF renderizzato, non dedotta * dalle percentuali: al netto di padding e bordi la cella risulta 35.9mm, * e la costante tiene un margine su quel valore. Se cambiano le * percentuali delle colonne o i margini di pagina, va rimisurata. * * "Assegnato a" è nowrap su una riga sola: basta il corpo che ci sta, e * oltre il minimo si tronca. La colonna del riporto ospita solo una data, * quindi non ha bisogno di adattamenti. */ $MM_PER_CARATTERE_PER_PUNTO = 0.20; $CORPO_MIN_PT = 4.5; $LARGHEZZA_NOME_MM = 34.0; // cella misurata 35.9mm $corpoPer = static function (string $testo, float $larghezzaMm, float $corpoMaxPt) use ($MM_PER_CARATTERE_PER_PUNTO, $CORPO_MIN_PT): string { $len = mb_strlen($testo); if ($len === 0) { return $corpoMaxPt . 'pt'; } $pt = $larghezzaMm / ($len * $MM_PER_CARATTERE_PER_PUNTO); return round(max($CORPO_MIN_PT, min($corpoMaxPt, $pt)), 1) . 'pt'; }; $troncaPer = static function (string $testo, float $larghezzaMm) use ($MM_PER_CARATTERE_PER_PUNTO, $CORPO_MIN_PT): string { $max = (int) floor($larghezzaMm / ($CORPO_MIN_PT * $MM_PER_CARATTERE_PER_PUNTO)); return mb_strlen($testo) > $max ? mb_substr($testo, 0, $max - 1) . '…' : $testo; }; $ultimaPagina = $pagine->count() - 1; @endphp S-13 — Registrazione delle assegnazioni del territorio @foreach($pagine as $indice => $righe)

REGISTRAZIONE DELLE ASSEGNAZIONI DEL TERRITORIO

Anno di servizio: {{ $annoLabel }}
@for($c = 0; $c < 8; $c++) @endfor {{-- Le larghezze stanno sia nel sia qui: in layout fisso dompdf le ricava dalle celle della prima riga, e senza queste le due colonne rowspan si spartiscono lo spazio in parti uguali invece di rispettare il colgroup. --}} @for($g = 0; $g < 4; $g++) @endfor @for($g = 0; $g < 4; $g++) @endfor @foreach($righe as $riga) @foreach($riga['assegnazioni'] as $a) @php($nome = $troncaPer($a['nome'], $LARGHEZZA_NOME_MM)) @endforeach @foreach($riga['assegnazioni'] as $a) @endforeach @endforeach
Terr.
N.
Restituito
l’ultima volta il*
Assegnato a
Assegnato il Restituito il
{{ $riga['numero'] }} {{ $riga['riporto'] }}{{ $nome }}
{{ $a['assegnato_il'] }} {{ $a['restituito_il'] }}
*Quando si inizia un nuovo foglio, registrare in questa colonna l’ultima data in cui è stato restituito ogni territorio.
S-13-I  1/22
@endforeach