docs(livrables): charte EnerVision sur les rapports EC02 et EC04, chaîne md2pdf versionnée

Les deux PDF sont régénérés avec la chaîne Markdown vers HTML vers CSS de pagination
vers PDF, désormais versionnée dans docs/livrables/outils (script, CSS, logo). Le CSS
reprend les tokens du frontend (vert primaire, neutres, Lato en substitut de Segoe UI,
tableaux sans filet vertical, badges d'état pour les marqueurs Prouvé, Constaté, Absent).

Le rapport collectif EC02 perd sa section « Écarts entre conception (EC01) et
réalisation » : les dossiers EC01 sont individuels et différents d'un membre à l'autre,
il n'existe pas une conception collective à comparer. Les sections suivantes sont
renumérotées ; le rapport passe de 12 à 10 pages.
This commit is contained in:
Johan LEROY
2026-09-24 16:50:46 +02:00
parent 931ec9e527
commit 5e06b08546
6 changed files with 108 additions and 39 deletions
+35
View File
@@ -0,0 +1,35 @@
#!/usr/bin/env bash
# Réf : consigne formateur, version figée d'un livrable = Markdown -> HTML -> CSS de pagination -> PDF.
# Usage : md2pdf.sh "fichier.md" [sortie.pdf]. Sans sortie, le PDF est écrit à côté du .md.
set -euo pipefail
src="$1"
out="${2:-${src%.md}.pdf}"
here="$(cd "$(dirname "$0")" && pwd)"
work="$(mktemp -d)"
trap 'rm -rf "$work"' EXIT
title="$(grep -m1 '^# ' "$src" | sed 's/^# //; s/&/\&amp;/g; s/</\&lt;/g')"
css_title="$(grep -m1 '^# ' "$src" | sed 's/^# //; s/\\/\\\\/g; s/"/\\"/g')"
logo="$(base64 -w0 "$here/logo-icon.png")"
npx --yes marked@18 --gfm -i "$src" -o "$work/body.html"
sed -i 's/ \([:;?!»]\)/\xc2\xa0\1/g; s/« /«\xc2\xa0/g' "$work/body.html"
# Les marqueurs de preuve du rapport EC04 deviennent des pastilles, comme les badges d'état de l'application.
sed -i -E 's#\[Prouvé\]#<span class="badge ok">Prouvé</span>#g; s#\[Constaté\]#<span class="badge warn">Constaté</span>#g; s#\[Absent\]#<span class="badge no">Absent</span>#g; s#<strong>((<span class="badge[^"]*">[^<]*</span> ?)+)</strong>#\1#g' "$work/body.html"
{
printf '<!doctype html>\n<html lang="fr"><head><meta charset="utf-8"><title>%s</title><style>\n' "$title"
cat "$here/md2pdf.css"
# Piège : Chromium ignore `string-set`, le titre du pied de page est donc écrit en dur ici.
printf '\n@page { @bottom-left { content: "%s"; } }\n' "$css_title"
printf '\n</style></head><body>\n'
printf '<div class="brand"><div class="lockup"><img src="data:image/png;base64,%s" alt=""><span class="name">EnerVision</span></div><div class="meta">EADL 2026 · Groupe 3</div></div>\n' "$logo"
cat "$work/body.html"
printf '\n</body></html>\n'
} > "$work/doc.html"
chromium --headless --disable-gpu --no-pdf-header-footer \
--print-to-pdf="$out" "file://$work/doc.html" 2>/dev/null
echo "PDF écrit : $out"