Перейти к основному контенту

Создание превьюшки из PDF и запись картинки в PREVIEW_PICTURE на лету по событию создания элемента

// проверить включено ли расширение Imagick (зайти через putty, в меню битрикс env, и там 8 -> 2 -> 7).
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("Preview_PDF", "OnAfterIBlockElementAddHandler")); // вызываем функцию при событии "после добавления элемента в инфоблок

class Preview_PDF{

    // создаем обработчик события "OnAfterIBlockElementAdd"
    function OnAfterIBlockElementAddHandler(&$arFields){
        if(CModule::IncludeModule("iblock")) // подключаем модуль для работы с инфоблоком
        {
            $arFile = ''; // создаем переменную в которой будет записан путь к файлу
            $res =  CIBlockElement::GetProperty($arFields["IBLOCK_ID"], $arFields["ID"], array("sort" => "asc"), Array("CODE"=>"FILE"));
            if ($ob = $res->GetNext()){
                $arFile = CFile::GetFileArray($ob['VALUE']); // получаем массив данных по файлу
            }
        }
        //генерация превью
        $pdf = $_SERVER["DOCUMENT_ROOT"].$arFile['SRC'];
        $image = new Imagick($pdf.'[0]');
        $image->setImageFormat( "jpg" );
        $image->writeImage($_SERVER["DOCUMENT_ROOT"]. "/include/picture/".str_replace('pdf', 'jpg', $arFile["ORIGINAL_NAME"]));

        // запись превью в массив arFields
        $el = new CIBlockElement;
        $arLoadProductArray = Array(
            "PREVIEW_PICTURE" => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]. "/include/picture/".str_replace('pdf', 'jpg', $arFile["ORIGINAL_NAME"]))
        );
        $res = $el->Update($arFields["ID"], $arLoadProductArray);

    }
}