{{-- Sans cette declaration, dompdf lit le document en Windows-1252 et les caracteres accentues ressortent en deux signes sans glyphe. --}} @php /** * Affiches de destockage, une page A4 par produit. Tout est pose en * absolu, en millimetres : dompdf n'a ni flex ni grille, et l'etoile du * prix deborde de la page par la droite, ce qu'un flux ne sait pas faire. */ // L'etoile : douze pointes sur une ellipse, la meme en rouge decalee // dessous pour l'ombre. Un trait de la couleur du fond, a jointures // rondes, emousse les pointes. En SVG et pas en image : elle s'imprime en // A4 comme en A3 sans baver. $pointes = []; for ($i = 0; $i < 24; $i++) { $angle = M_PI * $i / 12 - M_PI / 2; [$rx, $ry] = $i % 2 ? [262, 150] : [300, 186]; $pointes[] = round(310 + $rx * cos($angle), 1) . ',' . round(196 + $ry * sin($angle), 1); } $pointes = implode(' ', $pointes); $forme = fn ($couleur, $dy) => ''; $etoile = 'data:image/svg+xml;base64,' . base64_encode( '' . $forme('#ff1e00', 22) . $forme('#fdc844', 0) . '' ); // La barre du prix d'origine, en SVG elle aussi : dompdf ne sait pas // incliner un text-decoration. $barre = 'data:image/svg+xml;base64,' . base64_encode( '' . '' ); // Largeur d'un texte en Helvetica gras, en mm. Les chiffres y ont tous // la meme chasse (556 pour 1000), l'espace la moitie : de quoi poser la // barre sur les chiffres seuls sans mesurer quoi que ce soit. $chasse = fn (string $chiffres, float $corps) => (preg_match_all('/\d/', $chiffres) * 0.556 + preg_match_all('/[ ,]/', $chiffres) * 0.278) * $corps * 0.3528; // Centre du texte dans l'etoile, corps du prix barre, largeur de « € HT ». $axe = 151; $corpsBarre = 34; $suffixe = (0.278 + 0.556 + 0.278 + 0.722 + 0.611) * $corpsBarre * 0.3528; @endphp @foreach ($affiches as $a) @php // Le prix d'origine ne se barre que s'il y a un prix a mettre en face. $barre_ = $a['prix'] && $a['prix_barre'] ? $a['prix_barre'] : null; $chiffres = $barre_ ? $chasse($barre_, $corpsBarre) : 0; $debut = $axe - ($chiffres + $suffixe) / 2; $colonnes = [ 'gauche' => [ ['Produit', $a['produit']], ['Hauteur', [$a['hauteur'], null]], ['Entre poteaux', [$a['largeur'], null]], ], 'droite' => [ ['Couleur', $a['couleur']], ['État général', [$a['etat'], null]], ['Observations', [implode("\n", $a['observations']), null]], ], ]; @endphp
{{ $a['code'] }}
@if ($a['image']) @endif @if ($a['prix']) @if ($barre_)
{{ $barre_ }} € HT
{{ $a['prix'] }} €
@else
{{ $a['prix'] }} € HT
@endif @endif @foreach ($colonnes as $cote => $lignes) @foreach ($lignes as [$libelle, $valeur]) @endforeach
{{ $libelle }} : {!! nl2br(e($valeur[0] ?? '')) ?: '—' !!} {{ $valeur[1] ?? '' }}
@endforeach
@endforeach