Текущие просмотрщики Synergy корректно отображают файлы наиболее часто используемых форматов, таких как txt, odt/doc/docx, ods/xls/xlsx, pps/ppt/pptx, pdf, png/jpg, mp3 и т.п. Для корректного отображения более редких и специфичных форматов, например, msg, msh, dwg и т.п., а также в отдельных случаях, когда возникают проблемы с отображением файлов распространённых форматов, можно подключить собственный конвертер файлов.
Требования к конвертеру:
Вызов конвертера описывается из конфигурационного файла с параметрами:
расширение исходного файла, для которого необходима конвертация;
путь до исполняемого файла-конвертера;
расширение файла, получаемого в результате конвертации;
идентификатор внешнего модуля;
таймаут выполнения операции.
Итоговое расширение должно быть одним из указанных - pdf / htd / png / tiff / mp3 / mp4.
На одно расширение необходимо использовать только 1 конвертер.
Форматы конфигурации:
Формат конфигурационного файла
Путь к конфигурационному файлу:
/opt/synergy/jboss/standalone/configuration/ai/converter.json
{ "dwg": { "path": "/opt/dwgconverter/bin/dwgconv.sh", "outFormat": "pdf", "moduleID": "6b13459e-aa3c-4a5a-94db-bb64f328e30c", "timeout": 10, "timeoutSinceChange": 2 }, "msg": { "path": "/opt/msgconverter/bin/msgconv.sh", "outFormat": "htd", "moduleID": "6b13459e-aa3c-4a5a-94db-bb64f328e30c", "timeout": 10, "timeoutSinceChange": 2 } }
где:
path
- путь до исполняемого
файла-конвертера;
outFormat
- расширение файла, получаемого в
результате конвертации;
moduleID
- идентификатор внешнего модуля
(используется для авторизации пользователя вне сессии);
timeout
- максимальное время выполнения
утилиты (в секундах);
timeoutSinceChange
- максимальное время с
последнего изменения (в секундах).
Формат передачи параметров исполняемому файлу-конвертеру
util path/input.txt uuid token
где:
path/input.txt
- путь до исходного файла;
uuid
- идентификатор исходного файла;
token
- ключ для авторизации пользователя
вне сессии, полученный из метода API
rest/api/person/generate_auth_key
.
Каждый параметр отделен от предыдущего пробелом. Соблюдение порядка следования параметров обязательно.
Для авторизации по Basic HTTP используются закодированные в Base64 логин и пароль, разделенные знаком «двоеточие». Подробнее про авторизацию по ключам написано в руководстве по интеграции.
Алгоритм работы внешнего конвертера на примере
Конфигурационный файл настроен таким образом, что для
расширения dwg
должен вызываться конвертер
dwgconv.sh
.
Пользователь загружает файл somefile.dwg
в
папку хранилища.
Считав с конфигурационного файла параметры и передав необходимые параметры, запускается утилита.
На каждый вызов утилиты создается своя папка в файловой
системе, куда в кладется результирующий файл
out.pdf
.
После окончания конвертации файл out.pdf
копируется в отдельную ноду хранилища.
При следующем открытии файла подгружается его сконвертированная версия соответствующим просмотрщиком Synergy.
При конвертации возможна запись нескольких вспомогательных файлов,
из которых и будет составлен итоговый out.pdf
.
В этом случае лучше использовать
timeoutSinceChange
вместо
timeout
.
Если выполнение записи одного такого файла займет больше, чем
указанное в таймауте timeoutSinceChange
время,
то процессу отправится sigterm (сигнал о прерывании).
Кроме того, если выполнение утилиты в целом займет больше, чем
указанное в таймауте timeout
время, то процессу
отправится sigterm (сигнал о прерывании).
Пример
Данный конвертер переписывает все PDF-файлы, исправляя некорректные. Решение взято отсюда.
Конвертер
Конвертер нужно положить в папку, указанную в конфигурационном файле (см. ниже).
#!/bin/sh ## Setup TMPDIR="/tmp" # Input parameters INFILE="$1" OUTFILE="$(dirname $INFILE)/out/out.pdf" # Ghostscript path GS="/usr/bin/gs" # Logs LOG_MAIN="/var/log/synergy/converters.log" LOG_STDOUT="$TMPDIR/conv-stdout$$.log" LOG_STDERR="$TMPDIR/conv-stderr$$.log" ## Actions # Set up logs exec 1> "$LOG_STDOUT" exec 2> "$LOG_STDERR" # Create output directory mkdir -p "$(dirname $OUTFILE)" # Convertation $GS \ -o "$OUTFILE" \ -sDEVICE=pdfwrite \ -dPDFSETTINGS=/prepress \ "$INFILE" if [ $? -ne 0 ]; then # If anything failed, append stdout to main log cat "$LOG_STDOUT" >> "$LOG_MAIN" fi cat "$LOG_STDERR" >> "$LOG_MAIN" # Cleanup rm -f "$LOG_STDOUT" "$LOG_STDERR"
Конфигурационный файл
{ "pdf": { "path": "/opt/synergy/utils/converters/fix-pdf.sh", "outFormat": "pdf", "timeout": 30, "timeoutSinceChange": 2 } }