diff --git a/config/services.yaml b/config/services.yaml index 9e15eca0..300497de 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -221,6 +221,11 @@ services: tags: - { name: 'app.label_placeholder_provider', priority: 10} + App\Services\LabelSystem\DompdfFactory: + arguments: + $fontDirectory: '%kernel.project_dir%/var/dompdf/fonts/' + $tmpDirectory: '%kernel.project_dir%/var/dompdf/tmp/' + #################################################################################################################### # Trees #################################################################################################################### diff --git a/src/Services/LabelSystem/DompdfFactory.php b/src/Services/LabelSystem/DompdfFactory.php new file mode 100644 index 00000000..4017a393 --- /dev/null +++ b/src/Services/LabelSystem/DompdfFactory.php @@ -0,0 +1,54 @@ +. + */ + +namespace App\Services\LabelSystem; + +use Dompdf\Dompdf; +use Jbtronics\DompdfFontLoaderBundle\Services\DompdfFactoryInterface; +use Symfony\Component\DependencyInjection\Attribute\AsDecorator; + +#[AsDecorator(decorates: DompdfFactoryInterface::class)] +class DompdfFactory implements DompdfFactoryInterface +{ + public function __construct(private string $fontDirectory, private string $tmpDirectory) + { + //Create folder if it does not exist + $this->createDirectoryIfNotExisting($this->fontDirectory); + $this->createDirectoryIfNotExisting($this->tmpDirectory); + } + + private function createDirectoryIfNotExisting(string $path): void + { + if (!is_dir($path)) { + if (!mkdir($concurrentDirectory = $path, 0777, true) && !is_dir($concurrentDirectory)) { + throw new \RuntimeException(sprintf('Directory "%s" was not created', $concurrentDirectory)); + } + } + } + + public function create(): Dompdf + { + return new Dompdf([ + 'fontDir' => $this->fontDirectory, + 'fontCache' => $this->fontDirectory, + 'tempDir' => $this->tmpDirectory, + ]); + } +} \ No newline at end of file diff --git a/src/Services/LabelSystem/LabelGenerator.php b/src/Services/LabelSystem/LabelGenerator.php index 943a4245..f16b135a 100644 --- a/src/Services/LabelSystem/LabelGenerator.php +++ b/src/Services/LabelSystem/LabelGenerator.php @@ -47,6 +47,7 @@ use App\Entity\Parts\PartLot; use App\Entity\Parts\Storelocation; use Dompdf\Dompdf; use InvalidArgumentException; +use Jbtronics\DompdfFontLoaderBundle\Services\DompdfFactoryInterface; /** * @see \App\Tests\Services\LabelSystem\LabelGeneratorTest @@ -55,7 +56,8 @@ final class LabelGenerator { public const MM_TO_POINTS_FACTOR = 2.83465; - public function __construct(private readonly LabelHTMLGenerator $labelHTMLGenerator) + public function __construct(private readonly LabelHTMLGenerator $labelHTMLGenerator, + private readonly DompdfFactoryInterface $dompdfFactory) { } @@ -78,7 +80,7 @@ final class LabelGenerator } } - $dompdf = new Dompdf(); + $dompdf = $this->dompdfFactory->create(); $dompdf->setPaper($this->mmToPointsArray($options->getWidth(), $options->getHeight())); $dompdf->loadHtml($this->labelHTMLGenerator->getLabelHTML($options, $elements)); $dompdf->render();