Переход серверов 1С на операционные системы семейства Linux ставит перед разработчиками сложную задачу: как обрабатывать документы Microsoft Office, если привычные COM-объекты (такие как Word.Application или Excel.Application) здесь недоступны? В корпоративном документообороте часто требуется автоматическая конвертация входящих файлов в формат PDF для их последующей передачи через HTTP-сервисы или отображения в веб-клиенте. Рассмотрим подробнее, как решить эту задачу максимально эффективно, используя современные инструменты и штатные возможности платформы 1С.
Это самый надежный и проверенный временем способ. На сервер Linux устанавливается офисный пакет LibreOffice (или его аналог OpenOffice), который умеет работать с документами через интерфейс командной строки без запуска графической оболочки (так называемый headless-режим).
Разберем по шагам процесс реализации:
sudo apt-get install libreoffice..docx «поплывет». Установите пакет ttf-mscorefonts-installer.ЗапуститьПриложение().Проанализируем пример кода для вызова конвертации:
// Путь к исполняемому файлу LibreOffice (обычно /usr/bin/soffice)
ПутьКПриложению = "/usr/bin/soffice";
// Формируем параметры запуска
// --headless: запуск без GUI
// --convert-to pdf: целевой формат
// --outdir: папка, куда сохранить результат
ПараметрыЗапуска = "--headless --convert-to pdf --outdir " + ПутьКПапкеРезультата + " " + ПутьКИсходномуФайлу;
// Запускаем процесс и ждем завершения (КодВозврата = 0 означает успех)
КодВозврата = 0;
ЗапуститьПриложение(ПутьКПриложению + " " + ПараметрыЗапуска, , Истина, КодВозврата);
Если КодВозврата <> 0 Тогда
ЗаписатьЛогСобытия("Ошибка конвертации файла: " + ПутьКИсходномуФайлу);
КонецЕсли;
Важный нюанс: сервер 1С (пользователь usr1cv8) должен иметь права на чтение исходного файла и запись в целевую директорию. Также рекомендуется использовать временные папки через КаталогВременныхФайлов() для избежания конфликтов при одновременной работе нескольких сессий.
Если ваша задача ограничивается только файлами .xls или .xlsx, выясним причину, по которой не всегда стоит использовать стороннее ПО. Платформа 1С начиная с версии 8.3 обладает встроенным механизмом чтения и записи табличных документов.
Посмотрим на пример реализации:
// Создаем объект ТабличныйДокумент
ТабДок = Новый ТабличныйДокумент;
// Читаем файл Excel напрямую (1С поддерживает форматы xls, xlsx)
Попытка
ТабДок.Прочитать(ПутьКФайлуExcel, СпособЧтенияЗначенийТабличногоДокумента.Значение);
// Настраиваем параметры печати, чтобы PDF выглядел корректно
ТабДок.АвтоМасштаб = Истина;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; // или Портрет
// Сохраняем в PDF
ТабДок.Записать(ПутьКPDF, ТипФайлаТабличногоДокумента.PDF);
Исключение
Сообщить("Не удалось сконвертировать Excel: " + ОписаниеОшибки());
КонецПопытки;
Этот метод работает быстрее, так как не требует запуска внешних процессов. Однако он имеет ограничение: 1С может некорректно отображать сложные диаграммы или специфическое форматирование ячеек, созданное в MS Excel. Для файлов Word (.doc, .docx) встроенного метода прямого преобразования в PDF в 1С на текущий момент нет.
В современной микросервисной архитектуре рассмотрим подробнее использование Docker. Проект Gotenberg предоставляет готовое API для конвертации практически любых форматов (Office, HTML, Markdown) в PDF.
Почему это удобно:
Схема работы из 1С:
docker run -p 3000:3000 gotenberg/gotenberg:7).HTTPЗапрос типа POST.multipart/form-data).HTTPОтвет, тело которого является готовым бинарным файлом PDF.Этот способ является наиболее современным («best practice») для высоконагруженных систем, так как позволяет вынести тяжелые операции конвертации на отдельный узел или сервер.
Если LibreOffice в командной строке работает недостаточно гибко (например, нужно скрыть определенные листы в Excel или добавить водяной знак), проанализируем ситуацию с использованием языка Python. В Linux-среде Python предустановлен почти везде.
Библиотека uno позволяет управлять LibreOffice через его внутренний API (Universal Network Objects). Вы можете написать короткий скрипт на Python, который будет принимать путь к файлу и возвращать PDF, а из 1С вызывать этот скрипт через ЗапуститьПриложение().
Преимущества этого подхода:
При реализации любого из вышеперечисленных методов обратите внимание на следующие моменты:
-env:UserInstallation, чтобы создавать для каждого процесса свою временную пользовательскую среду.Подведем итог: для простых задач с Excel идеально подходит штатный ТабличныйДокумент. Для полноценной работы с Word на Linux стандартом является связка 1С + LibreOffice Headless. Если же вы стремитесь к максимальной отказоустойчивости и чистоте архитектуры — используйте Docker-контейнеры с API-конвертерами.