Создавая бэкенд на 1С (так получилось...) для системы электронного документооборота, сталкивался с нестандартными задачами, одна из которых является добавление нижнего колонтитула (footer, подвал, как удобно) в шаблон docx. Ранее задача была заполнить docx файл с нужными данными, эту задачу я решил по методу автозаполнения шаблонов Заполнение шаблона Word (docx) на сервере без сторонних ПО.
Новая задача заключалась в том, чтобы в нижнем колонтитуле отображались данные о документе, чтобы с помощью этих данных можно было проверить подписи. Одним из важных данных являлся сам QR код, по которому проверяющий человек попадал на страницу верификации данного документа.
Так как все мои методы манипуляции с docx файлом работали через http-сервисы, мне нужно было сделать все с минимальным весом. Обращение куда-то, поднятие отдельных сервисов вообще не рассматривались, хотя были интересные методы на python. Головной болью являлись картинки в колонтитулах, о них никто не упоминал (именно по методу XML разбора), везде только текст, а мне еще QR надо было как то присобачить.
Весомую информацию взял с этой статьи Habr. Как я разбирал docx с помощью XSLT. Связи этих самых колонтитулов хорошо описаны в этой статье.
Картинку я добавил как image0.png, в нужных файлах описаны связи этой картинки.
Алгоритм выполнения:
1. Распаковка docx файла;
2. Проверка существующих нижних колонтитулов;
3. Добавление своих файлов для нижнего колонтитула:
- footer0.xml (заранее подготовленный footer)
- footer0.xml.rels (связи)
- image0.png (картинка, в моем случае QR код), у вас может быть логотип и т п.
4. Удаление файлов старого колонтитула.
5. Добавление данных в файлы:
- [Content_Types].xml
- document.xml.rels
- document.xml
6. При выполнении 5 п. заодно удалить связи прежних колонтитулов.
7. Запаковать docx файл.
На данный момент с помощью этого метода в моей конфигурации реализована верификация подписанных документов по QR коду. При добавлении колонтитула запрашивается идентификатор документа, а также генерируется новый QR код где зашифрована ссылка на проверку документа.
Для вашего удобства все это дело положил в обработку, за исключением формирования картинки QR. В обработке статичная картинка для демонстрации. Найти методы формирования QR не сложно если надо. Колонтитул добавляется на все существующие страницы документа. Добавляемый footer можно без проблем переделать на свой вариант. А также обработку легко можно переделать на добавление верхнего колонтитула.
Демонстрация:
1. В обработке указываем нужный docx файл куда нужно добавить ваш нижний колонтитул, нажимаем "добавить footer"
Файл до обработки:
2. Новый файл с колонтитулом сохраняется с именем файла _+footer.docx
Файл после обработки:
Приложенная обработка универсальна, подойдет для любых конфигураций на управляемых формах. Демонстрация проведена на платформе 8.3.21.1674, в моей конфигураций крутится все на 8.3.21.1624.