From 632ebe2848290c71fe822d9e83e164fc5cb00042 Mon Sep 17 00:00:00 2001 From: Jason Mayo Date: Tue, 4 Feb 2025 14:24:51 +0000 Subject: [PATCH] Keyword extraction failing if the asset was not a PDF --- CHANGELOG.md | 5 ++ composer.json | 2 +- src/services/PdfTransformService.php | 87 +++++++++++++++++----------- 3 files changed, 58 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 730f88c..857627e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # PDF Transform Changelog +## 1.0.11 - 2025-01-06 + +### Fixed +- Keyword extraction failing if the asset was not a PDF + ## 1.0.10 - 2025-01-06 ### Added diff --git a/composer.json b/composer.json index 5837ee6..32de9dc 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "bymayo/pdf-transform", "description": "Transform a PDF page to an image (JPEG, PNG)", "type": "craft-plugin", - "version": "1.0.10", + "version": "1.0.11", "keywords": [ "craft", "cms", diff --git a/src/services/PdfTransformService.php b/src/services/PdfTransformService.php index 3f94d66..872c946 100644 --- a/src/services/PdfTransformService.php +++ b/src/services/PdfTransformService.php @@ -113,57 +113,74 @@ public function render($asset) public function pdfToImage($asset, $indexKeywords = false) { + if ($asset->kind != 'pdf') { + return false; + } + $filename = $this->getFileName($asset); $volume = $this->getImageVolume(); - // @TODO: Check if file exists in volume here, and check to see if if the dates match - try { - $pathService = Craft::$app->getPath(); - $tempPath = $pathService->getTempPath(true) . '/' . mt_rand(0, 9999999) . '.png'; - file_put_contents($tempPath, file_get_contents($asset->url)); + $assetTransformed = Asset::find() + ->volumeId($volume->id) + ->filename($filename) + ->one(); + + if (!$assetTransformed) { + + $pathService = Craft::$app->getPath(); + $tempPath = $pathService->getTempPath(true) . '/' . mt_rand(0, 9999999) . '.' . $this->settings->imageFormat; + file_put_contents($tempPath, file_get_contents($asset->url)); + + $tempPathTransform = $pathService->getTempPath(true) . '/' . $filename; + + $folder = Craft::$app->getAssets()->getRootFolderByVolumeId($volume->id); - $tempPathTransform = $pathService->getTempPath(true) . '/' . $filename; + $pdf = new Pdf($tempPath); - $folder = Craft::$app->getAssets()->getRootFolderByVolumeId($volume->id); - - $pdf = new Pdf($tempPath); - - $pdf - ->setPage($this->settings->page) - ->setResolution($this->settings->imageResolution) - ->setCompressionQuality($this->settings->imageQuality) - ->saveImage($tempPathTransform); - - $assetTransformed = new Asset(); - $assetTransformed->tempFilePath = $tempPathTransform; - $assetTransformed->filename = $filename; - $assetTransformed->folderId = $folder->id; - $assetTransformed->newFolderId = $folder->id; - $assetTransformed->kind = 'Image'; - $assetTransformed->title = $asset->title; - $assetTransformed->avoidFilenameConflicts = true; - $assetTransformed->setVolumeId($volume->id); - $assetTransformed->setScenario(Asset::SCENARIO_CREATE); - - $assetTransformed->validate(); - - if (Craft::$app->getElements()->saveElement($assetTransformed, false)) - { - - if ($indexKeywords) + $pdf + ->setPage($this->settings->page) + ->setResolution($this->settings->imageResolution) + ->setCompressionQuality($this->settings->imageQuality) + ->saveImage($tempPathTransform); + + $assetTransformed = new Asset(); + $assetTransformed->tempFilePath = $tempPathTransform; + $assetTransformed->filename = $filename; + $assetTransformed->folderId = $folder->id; + $assetTransformed->newFolderId = $folder->id; + $assetTransformed->kind = 'Image'; + $assetTransformed->title = $asset->title; + $assetTransformed->avoidFilenameConflicts = true; + $assetTransformed->setVolumeId($volume->id); + $assetTransformed->setScenario(Asset::SCENARIO_CREATE); + + $assetTransformed->validate(); + + if (!Craft::$app->getElements()->saveElement($assetTransformed, false)) { - $this->indexKeywords($asset, $assetTransformed); + + PdfTransform::log($e->getMessage()); + throw new Exception('PDF Transform: Could not transform PDF to image'); + } - return $assetTransformed; } + if ($indexKeywords) + { + $this->indexKeywords($asset, $assetTransformed); + } + + return $assetTransformed; + } catch (Exception $e) { + PdfTransform::log($e->getMessage()); throw new Exception('PDF Transform: Could not transform PDF to image'); + } }