Ce package fournit une classe facile à utiliser pour convertir un PDF en une ou plusieurs images.
Vous devriez avoir installé Imagick et Ghostscript. Consultez les problèmes concernant les problèmes Ghostscript et Imagick pour plus d'informations.
Le package peut être installé via composer et nécessite PHP 8.2+ :
composer require spatie/pdf-to-image
Si vous utilisez PHP < 8.2, utilisez la version 2.0 de ce package.
Convertir un PDF en image est simple.
$ pdf = new Spatie PdfToImage Pdf ( $ pathToPdf );
$ pdf -> save ( $ pathToWhereImageShouldBeStored );
Si le nom de fichier que vous transmettez à saveImage
a les extensions jpg
, jpeg
, png
ou webp
, l'image sera enregistrée dans ce format ; sinon le format de sortie sera jpg
.
La méthode save()
renvoie un tableau avec les noms de fichiers des images enregistrées si plusieurs images sont enregistrées, sinon renvoie une chaîne avec le chemin d'accès à l'image enregistrée.
Obtenez le nombre total de pages dans le pdf :
/** @var int $numberOfPages */
$ numberOfPages = $ pdf -> pageCount ();
Vérifiez si un type de fichier est un format de sortie pris en charge :
/** @var bool $isSupported */
$ isSupported = $ pdf -> isValidOutputFormat ( ' jpg ' );
Par défaut, seule la première page du PDF sera rendue. Pour afficher une autre page, appelez la méthode selectPage()
:
$ pdf -> selectPage ( 2 )
-> save ( $ pathToWhereImageShouldBeStored ); //saves the second page
Ou sélectionnez plusieurs pages avec la méthode selectPages()
:
$ pdf -> selectPages ( 2 , 4 , 5 )
-> save ( $ directoryToWhereImageShouldBeStored ); //saves the 2nd, 4th and 5th pages
Modifiez le format de sortie :
$ pdf -> format ( Spatie PdfToImage Enums OutputFormat :: Webp )
-> save ( $ pathToWhereImageShouldBeStored ); //the saved image will be in webp format
Réglez la qualité de sortie (la qualité de compression) de 0 à 100 :
$ pdf -> quality ( 90 ) // set an output quality of 90 %
-> save ( $ pathToWhereImageShouldBeStored );
Définissez la résolution de sortie DPI :
$ pdf -> resolution ( 300 ) // resolution of 300 dpi
-> save ( $ pathToWhereImageShouldBeStored );
Spécifiez la taille de la vignette de l'image de sortie :
$ pdf
-> thumbnailSize ( 400 ) // set thumbnail width to 400 px; height is calculated automatically
-> save ( $ pathToWhereImageShouldBeStored );
// or:
$ pdf
-> thumbnailSize ( 400 , 300 ) // set thumbnail width to 400 px and the height to 300 px
-> save ( $ pathToWhereImageShouldBeStored );
Définissez la largeur de l'image de sortie :
$ pdf -> size ( 400 ) // set the width to 400 px; height is calculated automatically
-> save ( $ pathToWhereImageShouldBeStored );
Définissez la largeur et la hauteur de l'image de sortie :
$ pdf -> size ( 400 , 300 ) // set the width to 400 px and the height to 300 px
-> save ( $ pathToWhereImageShouldBeStored );
Obtenez les dimensions du PDF. Cela peut être utilisé pour déterminer si le PDF est en très haute résolution.
/** @var SpatiePdfToImageDTOsPageSize $size */
$ size = $ pdf -> getSize ();
$ width = $ size -> width ;
$ height = $ size -> height ;
Note
$directoryToWhereImagesShouldBeStored doit être un répertoire existant
Enregistrez toutes les pages dans des images :
$ pdf -> saveAllPages ( $ directoryToWhereImagesShouldBeStored );
Définissez la méthode de fusion des calques pour Imagick :
$ pdf -> layerMethod ( Spatie PdfToImage Enums LayerMethod :: Merge );
// or disable layer merging:
$ pdf -> layerMethod ( Spatie PdfToImage Enums LayerMethod :: None );
Définissez la couleur d'arrière-plan de l'image de sortie :
$ pdf -> backgroundColor ( ' white ' ) // simple text for ' white ' color
-> save ( $ pathToWhereImageShouldBeStored );
$ pdf -> backgroundColor ( ' #fff ' ) // code for ' white ' color
-> save ( $ pathToWhereImageShouldBeStored );
$ pdf -> backgroundColor ( ' rgb(255,255,255) ' ) // rgb for ' white ' color
-> save ( $ pathToWhereImageShouldBeStored );
Ce package utilise Ghostscript via Imagick. Pour que cela fonctionne, la commande Ghostscripts gs
doit être accessible depuis le processus PHP. Pour le processus PHP CLI (par exemple les tâches asynchrones de Laravel, les commandes, etc...), c'est généralement déjà le cas.
Cependant, pour PHP sur FPM (par exemple lors de l'exécution de ce package "dans le navigateur"), vous pourriez rencontrer le problème suivant :
Uncaught ImagickException: FailedToExecuteCommand 'gs'
Cela peut être résolu en ajoutant la ligne suivante à la fin de votre fichier php-fpm.conf
et en redémarrant PHP FPM. Si vous ne savez pas où se trouve le fichier php-fpm.conf
vous pouvez vérifier phpinfo()
. Si vous utilisez Laravel Valet, le fichier php-fpm.conf
se trouvera dans le répertoire /usr/local/etc/php/YOUR-PHP-VERSION
.
env[PATH] = /usr/local/bin:/usr/bin:/bin
Cela demandera à PHP FPM de rechercher le binaire gs
aux bons endroits.
Si vous recevez une erreur avec le message attempt to perform an operation not allowed by the security policy 'PDF'
, vous devrez peut-être ajouter la ligne suivante à votre fichier policy.xml
. Ce fichier se trouve généralement dans /etc/ImageMagick-[VERSION]/policy.xml
, tel que /etc/ImageMagick-7/policy.xml
.
< policy domain = " coder " rights = " read | write " pattern = " PDF " />
spatie/pdf-to-image
utilise le framework PEST pour les tests unitaires. Ils peuvent être exécutés avec la commande suivante :
./vendor/bin/pest
Veuillez consulter CHANGELOG pour plus d'informations sur ce qui a changé récemment.
Veuillez consulter CONTRIBUER pour plus de détails.
Veuillez consulter notre politique de sécurité pour savoir comment signaler les vulnérabilités de sécurité.
La licence MIT (MIT). Veuillez consulter le fichier de licence pour plus d'informations.