Как сформировать договор по шаблону в PDF без MS Office и добавить факсимильную печать в 1С?

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

При автоматизации документооборота часто возникает задача сформировать печатную форму договора, подставить в нее данные из информационной базы, предоставить пользователю возможность предварительного редактирования текста, наложить факсимильную печать с подписью и сохранить итоговый документ в формате PDF. Если на сервере приложений 1С не установлен пакет Microsoft Office и нет возможности использовать COM-объект Word.Application, решение этой задачи требует выбора альтернативных механизмов.

Рассмотрим подробнее основные способы решения этой задачи, их особенности, плюсы и технические нюансы реализации.

Способ 1. Использование штатного табличного документа (ТабличныйДокумент)

Самый простой и надежный вариант, не требующий установки стороннего программного обеспечения на сервер — использование встроенного объекта 1С ТабличныйДокумент.

Разберем по шагам, как правильно настроить макет и форму для работы с договором:

  1. Проектирование макета: За основу макета договора рекомендуется брать стандартную ширину колонок (по аналогии со стандартными макетами счетов на оплату), рассчитанную под формат листа А4. Это предотвратит произвольное сжатие и искажение текста.
  2. Подгонка по ширине: Для того чтобы документ корректно вписывался в границы страницы при печати или экспорте, включите автоматическое масштабирование:
    
    ТабДок.АвтоМасштаб = Истина;
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    
  3. Возможность редактирования: Вынесите ТабличныйДокумент на форму управляемого приложения. Пользователь сможет скорректировать текст прямо в интерфейсе 1С перед сохранением. Если отредактированный вариант нужно сохранить в базе, используйте объект ХранилищеЗначения.
  4. Контроль разрывов страниц: Чтобы избежать ситуаций, когда подписи и печать "отрываются" от текста и переносятся на отдельный пустой лист, используйте метод ПроверитьВывод():
    
    МассивСекций = Новый Массив;
    МассивСекций.Добавить(СекцияТекст);
    МассивСекций.Добавить(СекцияПодписиИПечать);
    
    // Проверяем, поместятся ли секции вместе на текущую страницу
    Если НЕ ТабДок.ПроверитьВывод(МассивСекций) Тогда
        ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    
    ТабДок.Вывести(СекцияТекст);
    
  5. Наложение факсимильной печати: Изображение печати и подписи додается в макет как картинка или накладывается поверх ячеек перед сохранением. При сохранении в PDF вызовите метод:
    
    ПутьКФайлу = "C:\Contracts\Contract_123.pdf";
    ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);
    

Важные нюансы при работе с Табличным документом:

– Разрыв длинных ячеек: В отличие от текстовых процессоров, отдельная ячейка табличного документа с включенным переносом текста не умеет автоматически разрываться посередине на стыке страниц. Если длинный абзац не помещается на остаток листа, вся строка переносится целиком. Чтобы избежать пустых полей внизу страниц, разбивайте длинный текст договора на несколько более мелких строк таблицы.

– Серверы на Linux: Если сервер 1С работает под управлением Linux, для корректной генерации PDF необходимо установить в систему шрифты Microsoft (пакет msttcorefonts, включая Arial и Times New Roman). Без них происходит подмена шрифтов, из-за чего может сдвигаться верстка и накладываться текст.

– Прозрачность рисунка: При использовании PNG-изображения факсимильной печати обязательно отключайте у рисунка заливку фона, иначе при экспорте в PDF вокруг печати может появиться белая или черная рамка.

Способ 2. Работа с шаблоном DOCX без MS Office (ZIP + XML)

Файл формата .docx представляет собой ZIP-архив, содержащий XML-структуру документа. Вы можете подставлять параметры в договор без запуска MS Word.

Проанализируем схему реализации:

  1. В редакторе создается файл договора DOCX с метками вида {Контрагент}, {Сумма}.
  2. В 1С архив распаковывается с помощью объектов ЧтениеZipФайла и ЗаписьZipФайла.
  3. Из архива считывается файл word/document.xml, в котором производиться замена меток на данные из 1С.
  4. Документ запаковывается обратно в DOCX.
  5. Для конвертации полученного DOCX в PDF на сервере вызывается бесплатный офисный пакет (например, LibreOffice) в консольном фоновом режиме через метод ЗапуститьПриложение().

Способ 3. Использование HTML и Форматированного документа

Выясним особенности использования HTML-шаблона:

  1. Редактирование: Текст договора выводится на форму через элемент ПолеHTMLДокумента или объект ФорматированныйДокумент, что дает пользователю удобный визуальный редактор.
  2. Факсимиле: Изображение печати и подписи встраивается в HTML-код в формате Base64 (<img src="data:image/png;base64,...">) и позиционируется поверх текста с помощью CSS-стиля position: absolute.
  3. Конвертация в PDF: Преобразование HTML-страницы в PDF выполняется с помощью сторонних утилит (например, wkhtmltopdf или браузера Chrome в headless-режиме), запускаемых из 1С с помощью команды ЗапуститьПриложение(). Для управления разрывами страниц в HTML применяются CSS-правила page-break-inside: avoid.

Резюме

Если задача требует быстрых результатов без привлечения стороннего ПО, оптимальным выбором является Табличный документ. Он позволяет реализовать предпросмотр, редактирование, точное позиционирование факсимильной печати и сохранение в PDF средствами платформы 1С.

← На главную