Я создаю веб-приложение, которое, помимо прочего, выполняет преобразование файлов из doc
в pdf
формат.
Я использовал LibreOffice, установленный на том же сервере вместе с мое веб-приложение. Выдавая и вызывая двоичный код libreoffice
из кода моего веб-приложения, я могу успешно конвертировать документы.
Проблема : когда мое веб-приложение получает несколько HTTP-запросов на выполнение c -> преобразование pdf в течение очень короткого периода времени (например, в миллисекундах), при вызове libreoffice
не удается запустить несколько экземпляров одновременно. Это приводит к тому, что некоторые файлы успешно преобразуются, а некоторые нет.
Решение этой проблемы, как я вижу, будет следующим:
- запустите
libreoffice
службу один раз, сделайте если он принимает подключения, - при обработке HTTP-запросов в моем веб-приложении, обратитесь к работающей службе
libreoffice
, запрашивающей его выполнить преобразование формата файла, - упрощение "разговорной" части через оболочку некоторому инструменту CLI или с помощью других средств, таких как отправка
libreoffice
запросов API в файл порта или сокета).
После небольшого исследования я нашел инструмент CLI под названием jodconverter
. Из него я могу использовать jodconverter-cli
для конвертации файлов. Преобразование работает, но, к сожалению, jodconverter
остановит сервер libreoffice
после выполнения преобразования (об этом есть открытая проблема ). Я не вижу способа отключить это поведение.
В качестве альтернативы я рассматриваю следующие варианты:
в моем веб-приложении, убедитесь, что все преобразования выполнены запросы ставятся в очередь; это явно побеждает параллелизм, например, моим пользователям придется ждать конвертации своих файлов,
исследовать дальше и использовать что-то под названием UNO , однако для этого нет привязки для язык, который я использую (Elixir), и я не могу найти способ создать полезную нагрузку UNO вручную.
Как я могу использовать libreoffice
как сервис, использующий UNO