Примеры использования
Отправка документа на конвертацию
$transformer = new \Bitrix\Transformer\DocumentTransformer(); // $file - абсолютный путь к файлу, ссылка на файл, ИД из b_file. ИД из b_file надо передавать как integer // Если такой файл есть - он найдётся. // $formats - массив того, что надо сделать с файлом. Для документов это, как правило, pdf и jgp // $module - название или массив названий модулей, которые необходимо будет подключить перед вызовом колбека // $callback - полное имя класса (или массив классов), которые воспроизводят интерфейс \Bitrix\Transformer\InterfaceCallback // $params - произвольный набор параметров, который пойдёт на вход колбекам. // Может содержать название очереди по ключу queue. Если его не будет, на сервере будет выбрана очередь по умолчанию $result = $transformer->transform($file, $formats, $module, $callback, $params); if($result->isSuccess()) { // everything is fine } else { $errors = $result->getErrors(); }
Получение статуса последней команды по файлу
Если у вас есть файл (в том же формате, что ушел на вход \Bitrix\Transformer\FileTransformer::transform())
и вы хотите получить статус выполнения последней команды, то надо сделать следующее:
// $file - абсолютный путь к файлу, ссылка на файл, ИД из b_file. ИД из b_file надо передавать как integer $transformInfo = FileTransformer::getTransformationInfoByFile($file);
В результате вернется либо false
, если такой файл не отправлялся на конвертацию, либо массив вида:
array( 'status' => $command->getStatus(), // статус команды 'time' => $command->getTime(), // время отправки на конвертацию 'id' => $command->getId(), // ид команды из таблицы b_transformer_command 'params' => $command->getParams(), // параметры команды );
Пример реализации колбека
Полный пример лучше смотреть в исходниках. Это \Bitrix\DocumentGenerator\Integration\TransformerManager
и \Bitrix\Disk\Integration\TransformerManager
.
В интерфейсе \Bitrix\Transformer\InterfaceCallback
только один метод - call На вход метод идут параметры:
- $status (int) - статус команды
- $command - название команды
- $params - параметры, которые шли на вход команды
- $result - массив результатов выполнения команды, где ключ - формат, а значение - результат. Если в результате есть файлы, то они будут в отдельном массиве files, где ключ - формат, а значение - путь к файлу
Метод должен возвращать true
в случае нормального выполнения и строку с текстом ошибки в случае ошибки (эта ошибка запишется на сервер конвертации).
Ниже простой пример:
class TransformerCallback implements \Bitrix\Transformer\InterfaceCallback { public static function call($status, $command, $params, $result = array()) { // На вход команды в $params указываем fileId - идентификатор файла. // Теперь надо сбросить по нему кеш с информацией о команде if(isset($params['fileId']) && $params['fileId'] > 0) { FileTransformer::clearInfoCache($params['fileId']); } if($status === 1000) { // do something with error return true; } $pdfFileResult = $result['files']['pdf']; if($pdfFileResult) { $file = \CFile::MakeFileArray($pdfFileResult, 'application/pdf'); $bFileId = \CFile::SaveFile($file); // save $bFileId } // send some php event return true; } }
Получение подробной ошибки конвертации файла
С версии модуля transformer 18.1.0 добавлено сохранение кодов ошибок с сервера и описания этих ошибок. Пример получения подробного описания ошибки конвертации файла:
// $file - абсолютный путь к файлу, ссылка на файл, ИД из b_file. ИД из b_file надо передавать как integer. $foundFile = new \Bitrix\Transformer\File($file); $publicPath = $foundFile->getPublicPath(); $command = Command::getByFile($publicPath); // метод getByFile вернет объект \Bitrix\Transformer\Command или false, если файл не отправлялся на конвертацию $error = $command->getError() // в результате вернет объект \Bitrix\Main\Error