Files
ENI-projet-piscine/docs/livrables/outils/md2pdf.sh
T
Johan LEROY 5e06b08546 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.
2026-09-24 16:50:46 +02:00

36 lines
1.8 KiB
Bash
Executable File

#!/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"