Le déclenchement de la prévisualisation était mal situé, car en amont des exécutions éventuelles de code PHP présents dans le code compilé du squelette.
C'était déjà peu jouable pour la prévisualisation HTML, franchement inutilisable
pour une prévisualisation PDF (voir notamment le
"plugin spipdf":http://contrib.spip.net/spiPDF-v0-2-1-generer-des-contenus-sur-mesure-en-PDF
qui oblige à dédoubler tous les squelettes faute de pouvoir faire ça).

On déplace donc un peu en aval ce déclenchement, et on confie le comportement
standard à une fonction surchargeable: "public_previsualisation".

Comme exemple d'utilisation avec la lib mpdf (à installer)
rajouter dans squelettes-dist/formulaires/administration.html
le bouton suivant :
<pre><code class='html'>
[<a class="spip-admin-boutons"
     href="(#VAL{lib/mpdf}|is_dir|?{#SELF}
	|parametre_url_nonvide{var_mode,preview}
	|parametre_url_nonvide{pdf,1})">PDF</a>
]
</code></pre>

et définir dans mes_fontions.php

<pre><code class='php'>
function public_previsualisation($page)
{
  if (!_request('pdf') OR !is_readable($f = _DIR_RACINE . 'lib/mpdf/mpdf.php'))
    return public_previsualisation_dist($page);
  include_once($f);
  $f = str_replace(' ', '_', $GLOBALS['meta']['nom_site']) . '.pdf';
  $GLOBALS['flag_preserver'] = true;
  $page['entetes']['Content-Type'] = "application/pdf";
  $page['entetes']['Content-Disposition'] = "attachment; filename=$f";
  $mpdf = new mPDF($GLOBALS['meta']['charset']);
  $mpdf->WriteHTML($page['texte']);
  $page['texte'] = $mpdf->Output('', 'S');
  return $page;
}

function parametre_url_nonvide($url, $c, $v=NULL, $sep='&amp;') {
	return !$url ? '' : parametre_url($url, $c, $v, $sep);
}
</code></pre>