<?php
namespace App\EventListener;
use App\Entity\Invoice;
use imagick;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Vich\UploaderBundle\Event\Event as VichEvent;
use Vich\UploaderBundle\Event\Events as VichEvents;
class InvoicePdfUploadSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
// return the subscribed events, their methods and priorities
return [
VichEvents::POST_UPLOAD => 'createThumbnail'
];
}
public function createThumbnail(VichEvent $event)
{
$entity = $event->getObject();
if ($entity instanceof Invoice) {
if ($entity->getMimeType() === 'application/pdf') {
// target path
$targetFilename = str_replace('.pdf', '.png', $entity->getFileName());
$targetFilePath = $entity->getFileUpload()->getPath() . '/' . $targetFilename;
$pdfPage = $entity->getFileUpload()->getPathname() . '[0]';
// Hacky way since we rely on imagick
$im = new imagick($pdfPage);
$im->setImageColorspace(255);
$im->setFormat('png');
$im->writeImage($targetFilePath);
$im->clear();
$im->destroy();
}
}
}
}