#!/bin/sh # preview_inner.sh — exécuté DANS le conteneur sliding-preview · Chantier C2 # Usage : preview_inner.sh /work/chemin/deck.pptx [dpi] # Produit : /_previews/slide-NN.png + index.html set -e PPTX="$1" DPI="${2:-110}" if [ -z "$PPTX" ] || [ ! -f "$PPTX" ]; then echo "preview_inner: fichier introuvable: $PPTX" >&2 exit 1 fi # Polices PR réelles montées en volume (prioritaires sur Carlito/Caladea) if [ -d /fonts ]; then mkdir -p /usr/local/share/fonts/custom cp -f /fonts/*.ttf /fonts/*.TTF /fonts/*.otf \ /usr/local/share/fonts/custom/ 2>/dev/null || true fc-cache -f >/dev/null 2>&1 || true fi BASE=$(basename "$PPTX" .pptx) DIR=$(dirname "$PPTX") OUT="$DIR/${BASE}_previews" TMP=/tmp/lo mkdir -p "$OUT" "$TMP" rm -f "$OUT"/slide-*.png "$OUT/index.html" # 1. PPTX → PDF (profil LibreOffice jetable : pas de lock, RAM contenue) echo "preview_inner: conversion PDF ($BASE)..." soffice --headless --norestore \ -env:UserInstallation=file:///tmp/louser \ --convert-to pdf --outdir "$TMP" "$PPTX" >/dev/null PDF="$TMP/$BASE.pdf" if [ ! -f "$PDF" ]; then echo "preview_inner: la conversion PDF a échoué." >&2 exit 2 fi # 2. PDF → PNG par page echo "preview_inner: rasterisation PNG (${DPI} dpi)..." pdftoppm -png -r "$DPI" "$PDF" "$OUT/slide" # 3. Normalisation slide-N.png → slide-0N.png (decks < 10 slides) for f in "$OUT"/slide-?.png; do [ -f "$f" ] || continue n=$(basename "$f") mv "$f" "$OUT/slide-0${n#slide-}" done # 4. Galerie index.html (consultable via File Station ou partage web) { printf '%s\n' '' printf '%s\n' "$BASE" printf '%s\n' '' printf '

%s

\n' "$BASE" for f in "$OUT"/slide-*.png; do n=$(basename "$f") printf '
%s
\n' "$n" "$n" done printf '%s\n' '
' } > "$OUT/index.html" rm -f "$PDF" NB=$(ls "$OUT"/slide-*.png 2>/dev/null | wc -l | tr -d ' ') echo "preview_inner: $NB slides -> $OUT"