Подключаемые внешние конвертеры

Текущие просмотрщики Synergy корректно отображают файлы наиболее часто используемых форматов, таких как txt, odt/doc/docx, ods/xls/xlsx, pps/ppt/pptx, pdf, png/jpg, mp3 и т.п. Для корректного отображения более редких и специфичных форматов, например, msg, msh, dwg и т.п., а также в отдельных случаях, когда возникают проблемы с отображением файлов распространённых форматов, можно подключить собственный конвертер файлов.

Требования к конвертеру:

  1. Вызов конвертера описывается из конфигурационного файла с параметрами:

  1. Итоговое расширение должно быть одним из указанных - pdf / htd / png / tiff / mp3 / mp4.

  2. На одно расширение необходимо использовать только 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
  }
}

где:

Формат передачи параметров исполняемому файлу-конвертеру

util path/input.txt uuid token

где:

Каждый параметр отделен от предыдущего пробелом. Соблюдение порядка следования параметров обязательно.

Для авторизации по Basic HTTP используются закодированные в Base64 логин и пароль, разделенные знаком «двоеточие». Подробнее про авторизацию по ключам написано в руководстве по интеграции.

Алгоритм работы внешнего конвертера на примере

  1. Конфигурационный файл настроен таким образом, что для расширения dwg должен вызываться конвертер dwgconv.sh.

  2. Пользователь загружает файл somefile.dwg в папку хранилища.

  3. Считав с конфигурационного файла параметры и передав необходимые параметры, запускается утилита.

  4. На каждый вызов утилиты создается своя папка в файловой системе, куда в кладется результирующий файл out.pdf.

  5. После окончания конвертации файл out.pdf копируется в отдельную ноду хранилища.

  6. При следующем открытии файла подгружается его сконвертированная версия соответствующим просмотрщиком 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
  }
}