На момент написания этой статьи, алгоритм визуализации электронной подписи не изменился и остаётся актуальным для версий 2.1.15.4 и 2.1.16.1. Кому интересно, прошу под спойлер.
Алгоритм визуализации следующий. В общем макете «ШаблонОтметкиЭП»содержится картинка, в которую с помощью ImageMagick впечатываются данные о серийном номере сертификата, субъекте и сроке действия сертификата.
Тут сразу 2 нюанса хочу отметить:
- ImageMagick нужен свежий, который запускается не командой «convert.exe», а «magick.exe convert», причём ошибку о несоответствии версий вы получить только если в персональных настройках работы с файлами вы не меняли имя программы по умолчанию, оставив «convert.exe»;
- у сертификатов, выданных на организацию, в качестве имени субъекта (CN, Соммon Name) указывается организация, а вот в полях фамилия (SN), имя и отчество (GN) , как раз то, что нам надо для выполнения п. 5.23 ГОСТа. Если в тексте файла есть метка «ВставитьЭП», то вместо неё вставляется полученная картинка, а если этой метки нет, то картинка вставляется в документ в угол, который указан в настройках.
За вставку отвечает соответственное содержимое двух общих макетов «ВставкаИзображенияВместоТегаВDocx» и «ВставкаИзображенияЭПСУказаниемПоложенияDocx».
Вернёмся ещё к ImageMagick. Координаты текстовых элементов для вставки в шаблон указываются в функции «СоздатьОтметкуЭП()» общего модуля «РаботаСЭП» относительно левого верхнего угла изображения. Там же указывается размер шрифта надписей (последний параметр функции «НаложитьСтроки()» общего модуля «РаботаСКартинками»). Цвет текста можно поменять в параметре -fill функции «НаложитьСтроки()». Также хочу отметить, что геометрические размеры изображения после вставки в MS Word определяются элементами cx и cy, которые выражены в каких-то странных единицах, которые в коде 1С называются EMU (English Metrick Units). Я уже всё посчитал и подогнал, так что если размер шаблона не будет изменён, то всё будет красиво.
Без дополнительных доработок визуализация ЭЦП, предложенная 1С по умолчанию не жизнеспособна. При общении по электронной почте, в письмо вставляется не файл с подписью, а его визуализированная версия. Т.е. документ в редактируемом формате со штампом ЭП. Вашему контрагенту ничего не мешает дописать нужную информацию (допустим в договор) и отправить документ дальше. Когда обман вскроется, вы, конечно, сможете доказать, что отправляли документ с другим содержанием, но учитывая российские реалии это можно доказывать долго. Некоторые серьёзные министерства (Минкомсвязь и Минпромторг например) печатают в штампе надпись не «Документ подписан электронной подписью» (как указано в ГОСТе), а «Подлинник электронного документа подписанного ЭП хранится в ...». Наверное догадываются о чём-то.
Что можно сделать? Предлагаю формировать визуализацию документа в формате Adobe PDF и накладывать на него защиту. Я сразу оговорюсь, мне известно, что если у документа Adobe PDF разрешена печать, то снять с него защиту можно путём печати на виртуальном pdf-принтере, но есть несколько мыслей:
- в моём варианте разрешена только черновая печать, так что документы будут различаться;
- при некоторых вариантах документооборота, можно запретить печать;
- для злоумышленников это дополнительное лишнее действие, которое невозможно совершить по ошибке и оно подтверждает преступный умысел.
Попробуем наложить ограничения на использование файла визуализации. Мы вынуждены разрешить печать документа с визуализацией подписи, так как предполагаем, что документ у корреспондента может рассматриваться руководством в бумажном виде. Воспользуемся для этого бесплатным программным обеспечением PDFTK Free.
Программа (на момент написания статьи версии 2.02) представляет из себя консольную утилиту и графическую оболочку. В описании к данной утилиты сказано, что опытные пользователи (power users) могут использовать консольную утилиту. Мы естественно опытные, какие же ещё.
Среди публикаций на нашем сайте я находил обёртку для консольной утилиты PDFTK на 1С, в виде внешней обработки, там исполняемый файл лежал в макете и выгружался во временную папку для использования. Очень удобно, но запрещено текущим лицензионным соглашением. Может раньше было можно, не знаю.
Так что качаем программу с официального сайта, ставим на компьютер, где осуществляется визуализация подписываемых документов. Если процедура визуализации не сможет найти утилиту pdftk.exe, то файл в формате Adobe PDF будет всё равно создан, но пользователю будет выведено предупреждение о невозможности наложить дополнительную защиту. Путь к утилите зашит прямо в коде, т. к. по умолчанию инсталлятор ставит программу в одну папку: «C:\Program Files (x86)\PDFtk\bin» для 64-х битных систем.
Расширение проверено на конфигурации 1С:Документооборот государственного учреждения 2.1.15.4 и 2.1.16.1. Нет под рукой КОРП версии, но почти уверен, что взлетит.
Учитывая спорность наложения защиты, выкладываю два варианта расширения — с поддержкой pdftk и без. В версии без наложения защиты код просто закомментирован и его можно активировать.
Его тоже можно заставить создавать файлы PDF. Для этого используется параметр командной строки --convert-to. В расширении убираем весь код, от момента получения файла до запуска утилиты pdftk.
Я тестировал, у меня запустилось с такой строкой: C:\Program Files (x86)\LibreOffice\program\soffice.exe --headless --convert-to pdf:writer_pdf_Export "ТУТ_ИМЯ_ИСХОДНОГО_ФАЙЛА" --outdir "ТУТ_ДИРЕКТОРИЯ_ДЛЯ РЕЗУЛЬТАТА"
Как формировать и запускать консольные команды и проверять результат выполнения можно подсмотреть тут же в коде для утилиты PDFTK.
P.S. некоторые идеи, реализованные в расширении предложены пользователем ignor (они отмечены в тексте).
UPD: Механизм визуализации можно использовать совместно с возможностями отправки и приёма файлов с ЭЦП по почте.
UPD 26.01.2021: исправлены некоторые ошибки, проверена работоспособность на версии 2.1.27.1