35 votes

Compter le nombre de pages d'un PDF en PHP seulement

J'ai besoin d'un moyen de compter le nombre de pages d'un PDF en PHP. J'ai fait un peu de recherche sur Google et les seules choses que j'ai trouvées utilisent des scripts shell/bash, perl, ou d'autres langages, mais j'ai besoin de quelque chose en PHP natif. Existe-t-il des bibliothèques ou des exemples pour faire cela ?

25voto

Noik Points 353

Si vous utilisez Linux, c'est beaucoup plus rapide que d'utiliser identify pour obtenir le nombre de pages (surtout si le nombre de pages est élevé) :

exec('/usr/bin/pdfinfo '.$tmpfname.' | awk \'/Pages/ {print $2}\'', $output);

Vous devez installer pdfinfo.

14voto

Travis Beale Points 2338

Vous pouvez utiliser l'extension ImageMagick pour PHP. ImageMagick comprend les PDF, et vous pouvez utiliser l'extension identify pour extraire le nombre de pages. La fonction PHP est Imagick::identifyImage() .

13voto

user678415 Points 41

Je sais que c'est assez vieux... mais si c'est pertinent pour moi maintenant, ça peut l'être pour d'autres aussi.

Je viens de mettre au point cette méthode pour obtenir les numéros de page, car les méthodes indiquées ici sont inefficaces et extrêmement lentes pour les gros PDF.

$im = new Imagick();
$im->pingImage('name_of_pdf_file.pdf');
echo $im->getNumberImages();

Ça a l'air de bien fonctionner pour moi !

10voto

adrianbj Points 89

En fait, j'ai opté pour une approche combinée. Comme l'exécution est désactivée sur mon serveur, j'ai voulu m'en tenir à une solution basée sur PHP, ce qui m'a conduit à cette solution :

Code :

function getNumPagesPdf($filepath){
    $fp = @fopen(preg_replace("/\[(.*?)\]/i", "",$filepath),"r");
    $max=0;
    while(!feof($fp)) {
            $line = fgets($fp,255);
            if (preg_match('/\/Count [0-9]+/', $line, $matches)){
                    preg_match('/[0-9]+/',$matches[0], $matches2);
                    if ($max<$matches2[0]) $max=$matches2[0];
            }
    }
    fclose($fp);
    if($max==0){
        $im = new imagick($filepath);
        $max=$im->getNumberImages();
    }

    return $max;
}

S'il ne peut pas s'y retrouver parce qu'il n'y a pas de balises Count, il utilise l'extension php imagick. La raison pour laquelle je fais une double approche est que la seconde est assez lente.

9voto

lothar42 Points 113

Vous pouvez essayer fpdi (voir ici ), comme vous pouvez le voir, lorsque vous définissez le fichier source, vous récupérez les numéros de page.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X