Мініатюра для Pdf
Доволі часто на порталах викладають список Pdf файлів, і по назві не дуже зрозуміло що в ньому знаходиться.
Є різні варіанти зображення інформації, але графічний найбільш ефективний. Він дає змогу відразу зрозуміти про що йде мова.
Порівняймо декілька варіантів
1. Без мініатюр, просто назви
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;
}
}