Cette question porte sur le référencement et la comparaison. La solution est la réponse acceptée ci-dessous .
J'ai passé de nombreuses heures à chercher une solution rapide et facile, mais surtout précis Il s'agit d'un moyen d'obtenir le nombre de pages d'un document PDF. Comme je travaille pour une entreprise d'impression et de reproduction graphique qui travaille beaucoup avec des PDF, le nombre de pages d'un document doit être connu avec précision avant de le traiter. Les documents PDF proviennent de nombreux clients différents, ils ne sont donc pas générés avec la même application et/ou n'utilisent pas la même méthode de compression.
Voici quelques-unes des réponses que j'ai trouvées insuffisante ou simplement Ne fonctionne pas :
Utilisation de Imagick (une extension PHP)
Imagick nécessite beaucoup d'installation, apache doit être redémarré, et lorsque j'ai finalement réussi à le faire fonctionner, le traitement était incroyablement long (2 à 3 minutes par document) et renvoyait toujours les résultats suivants 1
dans chaque document (je n'ai pas vu de copie fonctionnelle d'Imagick jusqu'à présent), alors je l'ai jeté. C'était à la fois avec le getNumberImages()
y identifyImage()
méthodes.
Utilisation de FPDI (une bibliothèque PHP)
FPDI est facile à utiliser et à installer (il suffit d'extraire les fichiers et d'appeler un script PHP), MAIS de nombreuses techniques de compression ne sont pas prises en charge par FPDI. Il renvoie alors une erreur :
Erreur FPDF : Ce document (test_1.pdf) utilise probablement une technique de compression qui n'est pas supportée par l'analyseur libre livré avec FPDI.
Ouverture d'un flux et recherche avec une expression régulière :
Cela ouvre le fichier PDF dans un flux et recherche une sorte de chaîne, contenant le nombre de pages ou quelque chose de similaire.
$f = "test1.pdf";
$stream = fopen($f, "r");
$content = fread ($stream, filesize($f));
if(!$stream || !$content)
return 0;
$count = 0;
// Regular Expressions found by Googling (all linked to SO answers):
$regex = "/\/Count\s+(\d+)/";
$regex2 = "/\/Page\W*(\d+)/";
$regex3 = "/\/N\s+(\d+)/";
if(preg_match_all($regex, $content, $matches))
$count = max($matches);
return $count;
-
/\/Count\s+(\d+)/
(cherche/Count <number>
) ne fonctionne pas car seuls quelques documents possèdent le paramètre/Count
à l'intérieur, donc la plupart du temps, il ne renvoie rien. Source. -
/\/Page\W*(\d+)/
(cherche/Page<number>
) ne donne pas le nombre de pages, mais contient surtout d'autres données. Source. -
/\/N\s+(\d+)/
(cherche/N <number>
) ne fonctionne pas non plus, car les documents peuvent contenir plusieurs valeurs de/N
; la plupart, sinon tous, pas contenant le nombre de pages. Source.
Alors, qu'est-ce qu'un travail fiable et précis ?