Este paquete proporciona una clase fácil de usar para convertir un PDF en una o más imágenes.
Deberías tener instalados Imagick y Ghostscript. Consulte los problemas relacionados con Ghostscript e Imagick para obtener más información.
El paquete se puede instalar a través de Composer y requiere PHP 8.2+:
composer require spatie/pdf-to-image
Si está utilizando PHP <8.2, utilice la versión 2.0 de este paquete.
Convertir un PDF a una imagen es fácil.
$ pdf = new Spatie PdfToImage Pdf ( $ pathToPdf );
$ pdf -> save ( $ pathToWhereImageShouldBeStored );
Si el nombre de archivo que pasa a saveImage
tiene las extensiones jpg
, jpeg
, png
o webp
, la imagen se guardará en ese formato; de lo contrario, el formato de salida será jpg
.
El método save()
devuelve una matriz con los nombres de archivo de las imágenes guardadas si se guardan varias imágenes; de lo contrario, devuelve una cadena con la ruta a la imagen guardada.
Obtenga el número total de páginas en el pdf:
/** @var int $numberOfPages */
$ numberOfPages = $ pdf -> pageCount ();
Compruebe si un tipo de archivo es un formato de salida compatible:
/** @var bool $isSupported */
$ isSupported = $ pdf -> isValidOutputFormat ( ' jpg ' );
De forma predeterminada, solo se representará la primera página del PDF. Para representar otra página, llame al método selectPage()
:
$ pdf -> selectPage ( 2 )
-> save ( $ pathToWhereImageShouldBeStored ); //saves the second page
O seleccione varias páginas con el método selectPages()
:
$ pdf -> selectPages ( 2 , 4 , 5 )
-> save ( $ directoryToWhereImageShouldBeStored ); //saves the 2nd, 4th and 5th pages
Cambiar el formato de salida:
$ pdf -> format ( Spatie PdfToImage Enums OutputFormat :: Webp )
-> save ( $ pathToWhereImageShouldBeStored ); //the saved image will be in webp format
Establezca la calidad de salida (la calidad de compresión) de 0 a 100:
$ pdf -> quality ( 90 ) // set an output quality of 90 %
-> save ( $ pathToWhereImageShouldBeStored );
Establezca la resolución de salida DPI:
$ pdf -> resolution ( 300 ) // resolution of 300 dpi
-> save ( $ pathToWhereImageShouldBeStored );
Especifique el tamaño de la miniatura de la imagen de salida:
$ 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 );
Establezca el ancho de la imagen de salida:
$ pdf -> size ( 400 ) // set the width to 400 px; height is calculated automatically
-> save ( $ pathToWhereImageShouldBeStored );
Establezca el ancho y alto de la imagen de salida:
$ pdf -> size ( 400 , 300 ) // set the width to 400 px and the height to 300 px
-> save ( $ pathToWhereImageShouldBeStored );
Obtenga las dimensiones del PDF. Esto se puede utilizar para determinar si el PDF tiene una resolución extremadamente alta.
/** @var SpatiePdfToImageDTOsPageSize $size */
$ size = $ pdf -> getSize ();
$ width = $ size -> width ;
$ height = $ size -> height ;
Nota
$directoryToWhereImagesShouldBeStored debe ser un directorio existente
Guarde todas las páginas en imágenes:
$ pdf -> saveAllPages ( $ directoryToWhereImagesShouldBeStored );
Establezca el método de combinación de capas para Imagick:
$ pdf -> layerMethod ( Spatie PdfToImage Enums LayerMethod :: Merge );
// or disable layer merging:
$ pdf -> layerMethod ( Spatie PdfToImage Enums LayerMethod :: None );
Establezca el color de fondo de la imagen de salida:
$ 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 );
Este paquete utiliza Ghostscript a través de Imagick. Para que esto funcione, se debe poder acceder al comando Ghostscripts gs
desde el proceso PHP. Para el proceso PHP CLI (por ejemplo, trabajos asincrónicos, comandos, etc.) de Laravel, este ya suele ser el caso.
Sin embargo, para PHP en FPM (por ejemplo, al ejecutar este paquete "en el navegador") puede encontrarse con el siguiente problema:
Uncaught ImagickException: FailedToExecuteCommand 'gs'
Esto se puede solucionar agregando la siguiente línea al final de su archivo php-fpm.conf
y reiniciando PHP FPM. Si no está seguro de dónde se encuentra el archivo php-fpm.conf
puede consultar phpinfo()
. Si está utilizando Laravel Valet, el archivo php-fpm.conf
se ubicará en el directorio /usr/local/etc/php/YOUR-PHP-VERSION
.
env[PATH] = /usr/local/bin:/usr/bin:/bin
Esto le indicará a PHP FPM que busque el binario gs
en los lugares correctos.
Si recibe un error con el mensaje attempt to perform an operation not allowed by the security policy 'PDF'
, es posible que deba agregar la siguiente línea a su archivo policy.xml
. Este archivo generalmente se encuentra en /etc/ImageMagick-[VERSION]/policy.xml
, como /etc/ImageMagick-7/policy.xml
.
< policy domain = " coder " rights = " read | write " pattern = " PDF " />
spatie/pdf-to-image
utiliza el marco PEST para pruebas unitarias. Se pueden ejecutar con el siguiente comando:
./vendor/bin/pest
Consulte CHANGELOG para obtener más información sobre los cambios recientes.
Consulte CONTRIBUCIÓN para obtener más detalles.
Revise nuestra política de seguridad sobre cómo informar vulnerabilidades de seguridad.
La Licencia MIT (MIT). Consulte el archivo de licencia para obtener más información.