Trabajar con pdfs no es lo más cómodo del mundo.. especialmente cuando se trata de extraer información de ellos.
Cuando se requiere realizar una misma tarea muchas veces es sumamente útil crear scripts para automatizar estas tareas.
En este ejemplo te mostraré cómo extraer una imagen guardada en un documento como este:
Por supuesto que no partiremos desde 0 habiendo tantas librerías disponibles.
Qué librería PHP permite leer archivos PDF
Existen diversas librerías para leer archivos PDF en PHP. Para este caso, una buena es https://github.com/smalot/pdfparser.
Utilizarla es bastante simple.
Comenzamos por instalarla usando Composer:
composer require smalot/pdfparser
Con esto tendremos acceso a objetos de tipo Smalot\PdfParser\Parser
con los que podremos interpretar el contenido del archivo sin problemas.
Lo próximo entonces es abrir el archivo utilizando las capacidades de la librería:
<?php require_once 'vendor/autoload.php'; use Smalot\PdfParser\XObject\Image; $parser = new \Smalot\PdfParser\Parser(); $pdf = $parser->parseFile($argv[1]);
En este caso estoy usando un script que recibirá el nombre del archivo .pdf por la línea de comandos
Cómo identificar una imagen dentro de un PDF
Las imágenes dentro de los archivos pdf constituyen un tipo de objeto especial llamado XObject
.
Para identificarlos tenemos un método especial del parser: getObjectsByType
que podemos utilizar de esta forma:
foreach ($pdf->getObjectsByType('XObject') as $xobject) { ... }
Ahora entonces tenemos en la variable $xobject
la referencia a la imagen.
Lo que nos falta es guardar ese contenido en algún archivo, enviarlo por email o cualquier otra cosa que queramos hacer.
Simplemente se trata de utilizar el método getContent
del objeto, por ejemplo:
$images = array_filter($pdf->getObjectsByType('XObject'), fn($o) => $o InstanceOf Image ); foreach ( $images as $image ) { file_put_contents( 'image_'.$i, $image->getContent()); }
Y luego, si quisiéramos conocer el número de imágenes que había podríamos hacer un echo count($images);
- ¿Cómo instalar extensiones PHP en Docker? - 26/11/2024
- Cómo agregar una página de error 500 en un proyecto PHP - 31/10/2024
- ¿Cuántos contenedoresnecesita tu php? - 28/10/2024