/All-the-graphs-from-the-2019-report.htm

  • Je me suis bidouillé une fonction, adaptée à #SPIP, qui transforme un fichier #PDF en fichier JPEG. Ça fonctionne avec la commande
    exec(convert), qui est curieusement assez largement répandue sur les hébergements mutualisés… (la fonction gère le système de cache des images converties, dans /local/cache-pdf).

    function convertir_pdf($img) {
            $img = supprimer_timestamp($img);
            if (!file_exists($img)) $img = supprimer_timestamp(extraire_attribut($img, "src"));
            if (!file_exists($img)) return;

            if (preg_match(",(.*)\.pdf,", $img, $regs)) {
                    $dest = $regs[1];
                    $dir_var = sous_repertoire (_DIR_VAR, 'cache-pdf');
                    $dest = $dir_var.substr($dest, strrpos($dest, "/")+1, strlen($dest)).".jpg";
                   
                    if (file_exists($dest) && @filemtime($dest) > @filemtime($img)) {
                            return $dest;
                    } else {
                       exec('convert  -density 144 "'.$img.'[0]" -colorspace RGB -resize 50% "'.$dest.'"', $output, $return_var);
                            return $dest;
                    }
                    return;

            } else {
                    return;
            }
    }
    • Le PDF lourd qui me faisait planter, c’était le multipage. D’où la présence (dans cette version) du [0] dans le convert, qui indique de ne prendre que la première page. À partir de là je n’ai plus eu de plantages (mais en dehors du site mentionné, je n’ai pas testé ailleurs).

      Sinon, note le -density 144, puis le -resize 50% ensuite, pour calculer une image « haute définition » (a priori, pas monstrueuse non plus…) puis la réduire. D’après mes premiers essais, ça ne fait pas des images immense. Et si tu ne règles pas cette density, ça te calcule des images hyper-pixelisées (genre : basse définition agrandie). Je suppose que c’est là que ça se passe pour l’aspect gourmandise.

    • j’utilise pdftoppm pour transformer la premiere image d’un pdf en jpg
      en ligne de commande :
      pdftoppm -f 1 -l 1 \
      -scale-to-x 1920 \
      -scale-to-y -1 \
      -singlefile \
      -jpeg -tiffcompression jpeg \
      — source.pdf target
      je l’utilise uniquement en ligne de commande, pas interfacé avec php