Как конвертировать файлы Word в PDF на сервере 1С без использования COM-объектов?

Программист 1С v8.3 (Управляемые формы) 1С:Документооборот IT и автоматизация бизнеса
← На главную

При автоматизации бизнес-процессов, например, в 1С:Документооборот, часто возникает необходимость преобразования документов формата doc или docx в pdf — для этого подойдёт генератор документов Word с конвертацией в PDF. Стандартный подход с использованием COM-объектов (через Excel.Application или Word.Application) на серверной стороне считается нежелательным из-за проблем со стабильностью, утечками памяти и невозможностью работы в некоторых серверных ОС (например, Linux). Рассмотрим, как реализовать этот процесс надежно и эффективно.

Почему стоит отказаться от COM-объектов?

Использование COM-объектов на сервере приводит к тому, что в памяти запускается полноценный экземпляр приложения MS Office. Это создает огромную нагрузку на сервер, требует наличия лицензии на офис на каждой машине, где работает сервер 1С, и часто зависает, если документ содержит диалоговые окна или ошибки форматирования. Мы с вами разберем альтернативные пути, которые позволяют выполнять задачу «тихо» и безопасно.

Решение 1: Использование утилиты DocTo

Если на вашем сервере установлен Microsoft Word, но вы не хотите использовать прямую автоматизацию через COM, можно воспользоваться специализированной утилитой DocTo. Она работает как обертка над функционалом Word, но позволяет запускать конвертацию пакетно через командную строку.

Чтобы автоматизировать этот процесс в 1С, вам нужно использовать объект WScript.Shell для вызова консольной команды. Рассмотрим, как это выглядит на практике:


// Пример формирования команды для вызова DocTo через 1С
Команда = "docto -f ""C:\InputDocs"" -O ""C:\OutputPDF"" -T wdFormatPDF -OX .pdf";
ЗапуститьПриложение(Команда);

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

Решение 2: Использование LibreOffice в headless-режиме

Одним из самых мощных и бесплатных инструментов является LibreOffice. В отличие от Word, он имеет «headless-режим», то есть запуск без графического интерфейса, что специально создано для серверных задач.

Мы можем настроить 1С так, чтобы она передавала файл во временную папку, а затем запускала конвертацию командой:


// Команда для конвертации через LibreOffice
ПутьКLibreOffice = "C:\Program Files\LibreOffice\program\soffice.exe";
Команда = ПутьКLibreOffice + " --headless --convert-to pdf --outdir ""C:\TempPDF"" ""C:\SourceDoc.docx""";
ЗапуститьПриложение(Команда);

Преимущества этого подхода:

  1. Абсолютно бесплатная лицензия.
  2. Поддержка работы на Windows и Linux.
  3. Отсутствие нагрузки от графической оболочки офисного пакета.

Решение 3: Виртуальные принтеры и командная строка

Если вы хотите использовать системные возможности, можно настроить «расшаренный» принтер, который сохраняет документы в PDF. Например, при использовании таких решений как CutePDF или doPDF, можно отправлять документы на печать программно.

Рассмотрим структуру вызова печати через командную строку:


// Отправка файла на печать через системный принтер
Команда = "print /d:\\%COMPUTERNAME%\CutePDF C:\Files\test.txt";
ЗапуститьПриложение(Команда);

Однако стоит отметить, что этот метод менее гибкий в плане управления именем выходного файла. Его лучше использовать для простых задач, где именование PDF не является критически важным бизнес-требованием.

Рекомендации по реализации в бизнес-процессах 1С

Чтобы внедрить эти решения в ваш бизнес-процесс, придерживайтесь следующего алгоритма:

  1. Создание промежуточного хранилища: На сервере 1С создайте папку для обмена файлами, куда будут помещаться исходные docx.
  2. Асинхронная обработка: Не запускайте конвертацию в основном потоке бизнес-процесса. Лучше записывать путь к файлу в регистр сведений, а фоновым заданием (регламентным заданием) периодически проверять наличие новых задач на конвертацию.
  3. Контроль выполнения: После запуска внешнего процесса через ЗапуститьПриложение, ожидайте завершения работы утилиты и проверяйте наличие файла в целевой папке. Если файл появился, прикрепляйте его к объекту 1С через ПрисоединенныеФайлы.
  4. Очистка: Не забывайте удалять исходные файлы и временные документы после завершения процесса, чтобы не переполнять дисковое пространство сервера.

Используя эти методы, вы сможете построить надежную систему автоматической конвертации, которая не будет зависеть от нестабильных COM-объектов и позволит вам масштабировать инфраструктуру 1С без лишних проблем. А для решения смежной задачи предварительной нормализации исходных файлов в 1С:ДО пригодится механизм для автоматической конвертации устаревших документов doc в формат docx.

← На главную