Рубрики
Без рубрики

Ваш личный сервис слияния PDF-файлов

В этом посте вы познакомитесь с упаковкой эффективной команды Linux для объединения PDF-файлов в веб-приложение an… С тегами google cloud, cloudrun, pdf, java.

В этом посте вы узнаете, как создать эффективную команду Linux для объединения PDF-файлов в веб-приложение и разместить его в облаке. Затем вы можете сделать его доступным для своих друзей и семьи или даже внутри вашего предприятия с помощью простого браузера или в качестве внутреннего API для объединения PDF-файлов. Полный код находится в этом репозитории GitHub , а живой сервис находится здесь .

Есть довольно хорошая дискуссия о StackOverflow , сравнивающая различные подходы и результаты (скорость, размер документа и т.д.). В итоге я использовал pdf unite но не стесняйтесь использовать здесь что-то еще, так как изменение, вероятно, будет одним лайнером.

Первый шаг к тому, чтобы сделать это доступным в качестве веб-приложения, – это иметь возможность вызывать инструмент командной строки с выбранного вами языка, в моем случае Java. Я использовал ProcessBuilder Конструктор процессов , , начиная его с inheritIO() и Процесс.подождите() завершение.

Очевидно, что для этого требуется, чтобы pdfunite был установлен в базовой операционной системе, но об этом подробнее, когда мы упаковываем приложение в контейнер.

Популярные веб-фреймворки Java включают Spring Boot, Micronaut, Spark и т.д. Или даже необработанные HTTP-сервлеты. Я выбрал Spring Boot и использовал single controller для управления загрузкой MultipartFile и делегировал все хранение и обработку PDF-файлов выделенной службе , которая заботится об удалении из файловой системы каждого файла, который он использует или генерирует.

Интерфейс предельно прост; он поддерживает загрузку четырех файлов и сохраняет порядок объединения файлов (ограничение в четыре было выбрано произвольно; серверная часть не накладывает такого ограничения). Есть огромные возможности для улучшения, как обсуждалось в этом README .

Обратите внимание, что вам действительно не обязательно использовать Java – поскольку на следующем шаге мы будем упаковывать это как контейнер, мы действительно могли бы использовать здесь любую комбинацию языка и фреймворка.

Единственная приятная особенность Java – это ее динамичная экосистема, и в моем случае это означает использование Jib , инструмент с открытым исходным кодом для создания и отправки оптимизированного образа контейнера без необходимости писать Dockerfile или даже устанавливать docker. В моем случае я использовал плагин Maven и выполнил mvn compile jib:build (также поддерживается gradle).

Однако здесь главное – убедиться, что контейнерное приложение действительно сможет выполнить вызов pdfunite двоичный файл. С помощью Jib невозможно добавлять пакеты Linux, поэтому я заменил базовое изображение Jib по умолчанию в моем pom.xml с помощью простого изображения на основе openjdk:11-jre-slim и добавил pdfunite двоичный файл ( apt-get install poppler-utils ). На самом деле вам не нужно создавать этот образ, и вместо этого вы можете использовать тот, который я предоставил.

Как только ваше приложение упаковано в контейнер, изображение помещается (как часть процесса сборки Jib) в облачный реестр Google для более простого и быстрого развертывания с помощью этого тега: gcr.io/PROJECT-ID/pdf слияние

Cloud Run – это полностью управляемое решение Google, которое автоматически масштабирует контейнеры без состояния с помощью модели оплаты за использование. Он удивительно прост в использовании и хорошо подходит для того, чтобы представить это небольшое веб-приложение Java всему миру или внутри вашей организации.

Поскольку наш образ уже доступен из облачного реестра, мы можем просто развернуть новую службу с помощью cloud :

$ gcloud запустить развертывание –изображение gcr.io/PROJECT-ID/pdfmerger

Вы можете указать параметры для указания имени службы, использования платформы managed (в отличие от размещения в кластере Kubernetes), региона развертывания. Вы можете разрешить запросы, не прошедшие проверку подлинности, если хотите сделать это доступным как общедоступный веб-сайт или ограничить доступ к нему через Cloud IAM (если предполагается, что это услуга, доступная для других приложений в вашей организации). Вот соответствующие параметры при использовании console.cloud.google.com :

Поскольку Cloud Run построен на собственном , вы также можете развернуть то же приложение на Anthos GKE с помощью Cloud Run для Anthos , что является отличным вариантом для некоторых корпоративных настроек.

Как только развертывание завершится (что должно быть довольно быстрым), Cloud Run предоставит вам URL-адрес:

Ограничение в 40 МБ показалось разумным и применяется с помощью Spring Boot application.properties . Я также увеличил настройки памяти для облачного запуска до 2 ГБ.

Cloud Run имеет встроенный параллелизм, что означает, что несколько запросов могут поступать в один и тот же экземпляр контейнера. Это отличный способ лучше использовать ресурсы, а также ограничить холодные запуски. Однако это означает, что вам необходимо создавать свой сервис с учетом параллелизма; или всегда использовать параллельные API и сервисы.

В нашем случае это означает, что одновременные пользователи (все, кто использует данный экземпляр контейнера) используют одну и ту же файловую систему, и важно помнить об этом, чтобы избежать любого смешивания пользовательских файлов. Для этого приложения я решил эту проблему, сгруппировав файлы по пользователям с общим префиксом и сохранив их порядок в списке.

Вы можете быстро развернуть свою собственную копию этого веб-приложения с помощью кнопки Cloud Run (ссылка на репозиторий README ). Это позволит инкапсулировать все шаги, описанные до сих пор, и предоставит вам URL-адрес с развернутой службой.

В нынешнем виде у этого веб-приложения по-прежнему существует множество ограничений, и я бы не рекомендовал широко распространять его как есть. Надеюсь, однако, что это показало вам один из способов сделать популярный инструмент командной строки доступным через бессерверный веб-сервис.

Вы также можете решить воспользоваться преимуществами облачного хранилища Google или интеграции с Google Диском для улучшения пользовательского интерфейса, при этом, конечно, делясь со своими пользователями тем, как вы управляете их файлами.

Весь обсуждаемый код доступен в репозитории GitHub , а живой экземпляр приложения запущен здесь .

Речь идет не только о PDF! Вы можете адаптировать это для использования ImageMagick (для преобразования изображений), ffmpeg (например, для обрезки видео ), Inkscape или любой другой программы операционной системы, которая может быть упакована в контейнер. Если вы хотите сгенерировать PDF-файл из форматов productivity suite, то рассмотрите возможность использования этого аналогичного примера , в котором используется LibreOffice.

Оригинал: “https://dev.to/googlecloud/your-private-pdf-merge-service-4b40”