PdfPreviewGenerator.php in PDFPreview 2.0.x
File
src/PdfPreviewGenerator.php
View source
<?php
namespace Drupal\pdfpreview;
use Drupal\Component\Transliteration\TransliterationInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\File\FileSystemInterface;
use Drupal\Core\ImageToolkit\ImageToolkitManager;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\file\Entity\File;
class PdfPreviewGenerator {
protected $configFactory;
protected $fileSystem;
protected $transliteration;
protected $toolkitManager;
protected $languageManager;
public function __construct(ConfigFactoryInterface $config_factory, FileSystemInterface $file_system, TransliterationInterface $transliteration, ImageToolkitManager $toolkit_manager, LanguageManagerInterface $language_manager) {
$this->configFactory = $config_factory;
$this->fileSystem = $file_system;
$this->transliteration = $transliteration;
$this->toolkitManager = $toolkit_manager;
$this->languageManager = $language_manager;
}
public function getPdfPreview(File $file) {
$destination_uri = $this
->getDestinationURI($file);
if (file_exists($destination_uri)) {
if (filemtime($file
->getFileUri()) <= filemtime($destination_uri)) {
return $destination_uri;
}
else {
$this
->deletePdfPreview($file);
}
}
if ($this
->createPdfPreview($file, $destination_uri)) {
return $destination_uri;
}
}
public function deletePdfPreview(File $file) {
$uri = $this
->getDestinationURI($file);
$this->fileSystem
->delete($uri);
image_path_flush($uri);
}
public function updatePdfPreview(File $file) {
$original = $file->original;
if ($file
->getFileUri() != $original
->getFileUri() || filesize($file
->getFileUri()) != filesize($original
->getFileUri())) {
$this
->deletePdfPreview($original);
}
}
protected function createPdfPreview(File $file, $destination) {
$file_uri = $file
->getFileUri();
$local_path = $this->fileSystem
->realpath($file_uri);
$config = $this->configFactory
->get('pdfpreview.settings');
$toolkit = $this->toolkitManager
->createInstance('imagemagick');
$directory = $this->fileSystem
->dirname($destination);
$this->fileSystem
->prepareDirectory($directory, FileSystemInterface::CREATE_DIRECTORY);
$toolkit
->arguments()
->add('-background white');
$toolkit
->arguments()
->add('-flatten');
$toolkit
->arguments()
->add('-resize ' . $toolkit
->arguments()
->escape($config
->get('size')));
$toolkit
->arguments()
->add('-quality ' . $toolkit
->arguments()
->escape($config
->get('quality')));
if ($config
->get('type') == 'png') {
$toolkit
->arguments()
->setDestinationFormat('PNG');
}
else {
$toolkit
->arguments()
->setDestinationFormat('JPG');
}
$toolkit
->arguments()
->setSourceFormat('PDF');
$toolkit
->arguments()
->setSourceLocalPath($local_path);
$toolkit
->arguments()
->setSourceFrames('[0]');
return $toolkit
->save($destination);
}
protected function getDestinationURI(File $file) {
$config = $this->configFactory
->get('pdfpreview.settings');
$scheme = $this->configFactory
->get('system.file')
->get('default_scheme');
$langcode = $this->languageManager
->getCurrentLanguage()
->getId();
$output_path = $scheme . '://' . $config
->get('path');
if ($config
->get('filenames') == 'human') {
$filename = $this->fileSystem
->basename($file
->getFileUri(), '.pdf');
$filename = $this->transliteration
->transliterate($filename, $langcode);
$filename = $file
->id() . '-' . $filename;
}
else {
$filename = md5('pdfpreview' . $file
->id());
}
if ($config
->get('type') == 'png') {
$extension = '.png';
}
else {
$extension = '.jpg';
}
return $output_path . '/' . $filename . $extension;
}
}