Мініатюра для Pdf

Інше 2 лип. 2022 р.
 Мініатюра для Pdf

Доволі часто на порталах викладають список Pdf файлів, і по назві не дуже зрозуміло що в ньому знаходиться.
Є різні варіанти зображення інформації, але графічний найбільш ефективний. Він дає змогу відразу зрозуміти про що йде мова.

Порівняймо декілька варіантів 
1. Без мініатюр, просто назви
Screenshot_1  

2. Назви з Мініатюрами
Screenshot_2 

Як бачимо, з графікою все зрозуміло навіть не відкриваючи сам файл.

Реалізація:

Для початку потрібно перевірити чи увімкнено доповнення php imagick;

Далі для генерації мініатюри використаємо код нижче 

$img_url = getThumbnailPdf('file.pdf');
if($img_url){
 echo sprintf('<img src="%s"  />',$img_url);
}

Не забуваємо про саму функцію. Можливо задати висоту і ширину картинки , по замовчуванню 300 на 300. 
path_base - вказуємо кореневий шлях

    /**
     * Thumbnail PDF
     * @param $pdf_file
     * @return string
     * @throws ImagickException
     */
    function getThumbnailPdf($pdf_file)
    {
        $thumb_w = 300; //  ширина мініатюри
        $thumb_h = 300; // висота мініатюри
        $thumb_format = 'jpg';

        $path_base = '/';

        $file_image = sprintf('%stmpPdfthumbs/%s.%s', $path_base, $pdf_file, $thumb_format);
        $file_Url = sprintf('/tmpPdfthumbs/%s.%s', $pdf_file, $thumb_format);

        if (file_exists($file_image)) {
            return $file_Url;
        } else {
            $path = explode('/', $file_image);
            array_pop($path);
            $newPath = implode('/', $path);
            if (!is_dir($newPath)) {
                mkdir($newPath, 0755, true);
            }
        }
       
        try {
            $im = new imagick($path_base . $pdf_file . '[0]');
            $im->setImageBackgroundColor('#ffffff');
            $im->setImageAlphaChannel(11);
            $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
            $im->setCompression(Imagick::COMPRESSION_JPEG);
            $im->setCompressionQuality(80);
            $im->setImageFormat($thumb_format);
            $im->resizeImage($thumb_w, $thumb_h, Imagick::FILTER_LANCZOS, 0.9, TRUE);
            $im->writeImage($file_image);
            $im->clear();
            $im->destroy(); 

          return $file_Url;
        } catch (Exception $e) {
              return false;
        } 
    }