209 votes

Comment convertir un document PDF en une image de prévisualisation en PHP ?

Quelles bibliothèques, extensions, etc. seraient nécessaires pour convertir une partie d'un document PDF en fichier image ?

La plupart des bibliothèques PHP PDF que j'ai trouvées sont centrées sur la création de documents PDF, mais existe-t-il un moyen simple de rendre un document dans un format d'image adapté à une utilisation sur le web ?

Notre environnement est une pile LAMP.

0 votes

J'aimerais pouvoir le faire et que le fichier ait une .jpg extension. J'ai essayé la méthode .htaccess AddHandler et cela n'a pas fonctionné.

239voto

Paolo Bergantino Points 199336

Vous devez ImageMagick y GhostScript

<?php
$im = new imagick('file.pdf[0]');
$im->setImageFormat('jpg');
header('Content-Type: image/jpeg');
echo $im;
?>

En [0] signifie page 1 .

11 votes

Oui, ça marche. Vous pouvez aussi faire : $im->setResolution( 300, 300 ) par exemple pour rendre votre pdf à la résolution désirée.

6 votes

Je n'ai pas essayé, mais si vous utilisez google docs, et que l'iFrame ne vous dérange pas, cette suggestion pourrait fonctionner (c'est aussi un plugin wp). forrst.com/posts/PDF_thumbnails_with_Google_Docs-6G6

5 votes

Mais comment inclure ImageMagick et GhostScript dans un fichier php ?

37voto

Andrew Points 1790

Pour ceux qui, pour une raison quelconque, ne disposent pas d'ImageMagick, les fonctions GD fonctionneront également, en conjonction avec GhostScript. Exécutez la commande ghostscript avec exec() pour convertir un PDF en JPG, et manipuler le fichier résultant avec imagecreatefromjpeg() .

Exécutez la commande ghostscript :

exec('gs -dSAFER -dBATCH -sDEVICE=jpeg -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r300 -sOutputFile=whatever.jpg input.pdf')

Pour la manipulation, créez une nouvelle image de remplacement, $newimage = imagecreatetruecolor(...) et faire apparaître l'image actuelle. $image = imagecreatefromjpeg('whatever.jpg') et vous pouvez ensuite utiliser imagecopyresampled() pour modifier la taille, ou un certain nombre d'autres fonctions intégrées et non liées à l'utilisation de l'ordinateur. imagemagick commandes

3 votes

Pour obtenir uniquement une image de la première page, ajoutez les commutateurs -dFirstPage=1 -dLastPage=1 à la commande.

0 votes

Si cela ne fonctionne toujours pas, il se peut que vous deviez indiquer le chemin d'accès complet à l'interface de l'utilisateur. gs binaire.

0 votes

On dirait qu'il exécute une commande système. Et si l'utilisateur télécharge un fichier nommé something;rm -rf / ?

32voto

Jason Points 1478

Vous pouvez également obtenir le nombre de pages en utilisant

$im->getNumberImages();

Ensuite, vous pouvez créer des vignettes de toutes les pages en utilisant une boucle, par exemple.

'file.pdf['.$x.']'

34 votes

(Ceci devrait en fait être un commentaire sur la réponse de Paolo Bergantino)

0 votes

Une réponse intelligente, qui n'est pas donnée par d'autres mais que vous avez remarquée et écrite.

11voto

Jon Johnson Points 106

Si vous chargez le PDF à partir d'un blob, c'est ainsi que vous obtenez la première page au lieu de la dernière :

$im->readimageblob($blob);
$im->setiteratorindex(0);

10 votes

(Ceci devrait en fait être un commentaire sur la réponse de Paolo Bergantino)

10voto

Preet Sandhu Points 141

Vous pouvez également essayer d'exécuter l'utilitaire 'convert' fourni avec imagemagick.

exec("convert pdf_doc.pdf image.jpg");
echo 'image-0.jpg';

3 votes

Au lieu de pdf_doc.pdf, on préfère pdf_doc.pdf[0].

0 votes

Convert fait partie du paquet ImageMagick ; essayez sudo yum install ImageMagick

0 votes

Si cela ne fonctionne toujours pas, il se peut que vous deviez fournir le chemin d'accès complet à l'application convert binaire.

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