1с документооборот вставить регистрационный штамп
Правильно, на мой взгляд, после регистрации впечатать регистрационный штамп в нужное место сопроводительной записки и создать новую версию файла входящего документа уже со штампом. И старый сохранён на всякий случай, и новый для работы есть.
Сразу оговорюсь, что работу коллеги видел, но его метод мне не подошёл по 2-м причинам:
- письма приходят разные и место для впечатывания штампа необходимо выбирать вручную (не всегда в определённый угол и не всегда на первый лист документа).
- ImageMagick справляется с конвертацией не любых документов формата Adobe Pdf (это боль!).
Как выясняется при внимательном изучении, в 1С:Документооборот уже встроен функционал добавления регистрационного штампа в документ, но работает этот механизм только с файлами MS Office Word и Open Office Writer. А в этих форматах входящие письма редко приходят (примерно никогда), а в основном Adobe PDF или в каких-либо графических форматах.
Всё, что необходимо для решения данной задачи, оказывается, у нас есть. Почти у всех стоит на сервере и настроена такая прекрасная программа, как ImageMagick, соответственно константа ПутьКПрограммеКонвертацииPDF содержит путь к ней. Рекомендую ставить пакет Q8, а не Q16, т. к. работает он шустрее. Рассмотрим алгоритм впечатывания штампа в многостраничный формат (pdf, tiff) с обыкновенными картинками всё проще. Расширение умеет работать с любыми файлами, которые понимает пакет imagemagick.
1. Создаём временную папку и в неё сохраняем файл полистно в графическом формате (я использую jpeg с качеством 100%). Причём ImageMagick текстовый слой совмещает с графическим и получается полноценное изображение (последняя версия на момент написания публикации 7.0.10).
Данная команда создаёт файлы в формате jpeg с разрешением 200 dpi и автонумерацией от «000000» до «999999» в нашем каталоге. Удобство в том, что имя файла первой страницы всегда «image_000000.jpg». Запаса нумерации страниц должно хватить на все случаи жизни.
2. Создаём файл штампа. Тут может быть два решения, через параметр «-draw text x,y”, т. е. вставкой необходимого текста прямо на первую страницу документа или более сложный, но и более универсальный механизм создания штампа отдельно и впечатывания его куда нужно. Я пошёл вторым путём, хотя и с первым тоже поигрался (трудно выравнивать текст).
Эта команда создаёт изображение размером 472х157 (60х20 мм при 200 dpi), с полупрозрачным фоном, синим цветом текста, выровненным по центру, шрифтом Tahoma размером 30 точек и межстрочным интервалом 15 точек и текстом, который лежит в файле text.txt. Я экспериментировал с разными шрифтами, есть очень интересные начертания, хорошо смотрятся на штампе. Можно отсканировать реальный штамп, подобрать шрифт, имитирующий рукописный, и через «-draw text x,y” впечатывать номер и дату. Очень круто, но много возни.
3. Определяем координаты вставки штампа. Тут нам помогает тип «Картинка», который после чтения первой страницы изображения, возвращает нам его размеры. А настройки вставки штампа мы берём из штатного параметра «НастройкиПоложения», который нам приходит из процедуры вставки штампа (мы его совсем немного дополняем). Там простая математика, не буду тут разбирать.
4. Впечатываем штамп.
Команда к файлу «image_000000.jpg» прибавляет файл «stamp.jpg» со смещением 2100 и 3200 точек (для примера) и результат сохраняет в «result.jpg».
5. Собираем результат. Переименовываем «result.jpg» в «image_000000.jpg» собираем все файлы в один.
Команда из файлов image_*.jpg собирает один файл в формате Adobe PDF с понижением качества до 90%.
6. Ну и всё, уже в рамках штатного механизма создаём новую версию файла.
Наименование организации для удобства вынес в новый реквизит справочника «Организации» и разместил на форме.
Теперь про боль. Всё бы ничего, но некоторые документы, приходящие в организацию обрабатывались некорректно. После преобразования в jpeg документ становился серым и в нём пропадала часть текста. Что делать? Оказалось, что есть более специализированный конвертер, написанный в рамках проекта XPDFReader. Он работает быстро и делает изображения в формате PNG с нужным разрешением. Исполняемый файл pdftopng.exe я в расширение не включил (блюдём авторские права), его нужно скачать на сайте разработчика, поместить в макет «ШРВД_ПрограммаКонвертации» и установить в значение «Истина» переменные «ПредварительноКонвертировать» и «ПрограммаКонвертацииВМакете». Можно не в макет помещать, а на диск куда-нибудь сохранить и тогда путь необходимо указать в настройках, а переменной «ПрограммаКонвертацииВМакете» оставить значение «Ложь».
Все основные настройки вынесены в переменные расположенные в начале процедуры «ВставитьРегистрационныйШтампВФайлУказаниемПоложения()» общего модуля «ШРВД_ОбщиегоНазначенияСервер». Там указывается разрешение, размеры штампа, шрифт, его размер и межстрочный интервал.
Расширение разрабатывалось и тестировалось на платформе версии 8.3.17.1851 в конфигурации 1С:Документооборот государственного учреждения, редакция 2.1.28.12.
UPD: 08.02.2021 исправлена ошибка постановки штампа на обычное изображение и появилась возможность делать рамку вокруг штампа.
UPD: 03.07.2021 исправлена ошибка постановки штампа на не первую страницу документа, также мелкие доработки по результатам использования в организации.
Правильно, на мой взгляд, после регистрации впечатать регистрационный штамп в нужное место сопроводительной записки и создать новую версию файла входящего документа уже со штампом. И старый сохранён на всякий случай, и новый для работы есть.
Сразу оговорюсь, что работу коллеги видел, но его метод мне не подошёл по 2-м причинам:
- письма приходят разные и место для впечатывания штампа необходимо выбирать вручную (не всегда в определённый угол и не всегда на первый лист документа).
- ImageMagick справляется с конвертацией не любых документов формата Adobe Pdf (это боль!).
Как выясняется при внимательном изучении, в 1С:Документооборот уже встроен функционал добавления регистрационного штампа в документ, но работает этот механизм только с файлами MS Office Word и Open Office Writer. А в этих форматах входящие письма редко приходят (примерно никогда), а в основном Adobe PDF или в каких-либо графических форматах.
Всё, что необходимо для решения данной задачи, оказывается, у нас есть. Почти у всех стоит на сервере и настроена такая прекрасная программа, как ImageMagick, соответственно константа ПутьКПрограммеКонвертацииPDF содержит путь к ней. Рекомендую ставить пакет Q8, а не Q16, т. к. работает он шустрее. Рассмотрим алгоритм впечатывания штампа в многостраничный формат (pdf, tiff) с обыкновенными картинками всё проще. Расширение умеет работать с любыми файлами, которые понимает пакет imagemagick.
1. Создаём временную папку и в неё сохраняем файл полистно в графическом формате (я использую jpeg с качеством 100%). Причём ImageMagick текстовый слой совмещает с графическим и получается полноценное изображение (последняя версия на момент написания публикации 7.0.10).
Данная команда создаёт файлы в формате jpeg с разрешением 200 dpi и автонумерацией от «000000» до «999999» в нашем каталоге. Удобство в том, что имя файла первой страницы всегда «image_000000.jpg». Запаса нумерации страниц должно хватить на все случаи жизни.
2. Создаём файл штампа. Тут может быть два решения, через параметр «-draw text x,y”, т. е. вставкой необходимого текста прямо на первую страницу документа или более сложный, но и более универсальный механизм создания штампа отдельно и впечатывания его куда нужно. Я пошёл вторым путём, хотя и с первым тоже поигрался (трудно выравнивать текст).
Эта команда создаёт изображение размером 472х157 (60х20 мм при 200 dpi), с полупрозрачным фоном, синим цветом текста, выровненным по центру, шрифтом Tahoma размером 30 точек и межстрочным интервалом 15 точек и текстом, который лежит в файле text.txt. Я экспериментировал с разными шрифтами, есть очень интересные начертания, хорошо смотрятся на штампе. Можно отсканировать реальный штамп, подобрать шрифт, имитирующий рукописный, и через «-draw text x,y” впечатывать номер и дату. Очень круто, но много возни.
3. Определяем координаты вставки штампа. Тут нам помогает тип «Картинка», который после чтения первой страницы изображения, возвращает нам его размеры. А настройки вставки штампа мы берём из штатного параметра «НастройкиПоложения», который нам приходит из процедуры вставки штампа (мы его совсем немного дополняем). Там простая математика, не буду тут разбирать.
4. Впечатываем штамп.
Команда к файлу «image_000000.jpg» прибавляет файл «stamp.jpg» со смещением 2100 и 3200 точек (для примера) и результат сохраняет в «result.jpg».
5. Собираем результат. Переименовываем «result.jpg» в «image_000000.jpg» собираем все файлы в один.
Команда из файлов image_*.jpg собирает один файл в формате Adobe PDF с понижением качества до 90%.
6. Ну и всё, уже в рамках штатного механизма создаём новую версию файла.
Наименование организации для удобства вынес в новый реквизит справочника «Организации» и разместил на форме.
Теперь про боль. Всё бы ничего, но некоторые документы, приходящие в организацию обрабатывались некорректно. После преобразования в jpeg документ становился серым и в нём пропадала часть текста. Что делать? Оказалось, что есть более специализированный конвертер, написанный в рамках проекта XPDFReader. Он работает быстро и делает изображения в формате PNG с нужным разрешением. Исполняемый файл pdftopng.exe я в расширение не включил (блюдём авторские права), его нужно скачать на сайте разработчика, поместить в макет «ШРВД_ПрограммаКонвертации» и установить в значение «Истина» переменные «ПредварительноКонвертировать» и «ПрограммаКонвертацииВМакете». Можно не в макет помещать, а на диск куда-нибудь сохранить и тогда путь необходимо указать в настройках, а переменной «ПрограммаКонвертацииВМакете» оставить значение «Ложь».
Все основные настройки вынесены в переменные расположенные в начале процедуры «ВставитьРегистрационныйШтампВФайлУказаниемПоложения()» общего модуля «ШРВД_ОбщиегоНазначенияСервер». Там указывается разрешение, размеры штампа, шрифт, его размер и межстрочный интервал.
Расширение разрабатывалось и тестировалось на платформе версии 8.3.17.1851 в конфигурации 1С:Документооборот государственного учреждения, редакция 2.1.28.12.
UPD: 08.02.2021 исправлена ошибка постановки штампа на обычное изображение и появилась возможность делать рамку вокруг штампа.
UPD: 03.07.2021 исправлена ошибка постановки штампа на не первую страницу документа, также мелкие доработки по результатам использования в организации.
Дата публикации 10.07.2020
Использован релиз 2.1.21
- В настройках электронной подписи и шифрования на закладке "Штамп ЭП" установите флажок "Автоматическая вставка отметки об ЭП" и выберите местоположение штампа в документе (меню: Настройка и администрирование – Настройка программы – Общие настройки – Электронная подпись – ссылка "Настроить").
- Установите программы ImageMagick и GhostScript на сервере.
- Включите настройку "Использовать ImageMagick" (установите соответствующий флажок) и укажите путь к «magick.exe» на сервере (меню: Настройка и администрирование – Настройка программы – Работа с файлами).
- В настройках сервиса "Агент сервера 1С Предприятия" установите флажок "Разрешить взаимодействие с рабочим столом".
- В карточке документа на закладке "Обзор" выберите нужный файл и откройте его двойным щелчком мыши или по команде "Просмотреть" из контекстного меню.
Файл с наложенным штампом подписи создается автоматически:
- для docx, odt, pdf – файл создается сразу на сервере;
- для doc – файл создается на клиенте (только тонкий клиент Windows).
В шаблоне файла doc, docх, odt можно точно определить местоположение штампа, добавив в файл текст "ВставитьЭП". Если в файле нет этого текста, то местоположение штампа будет определено описанными выше настройками.
В конфигурации 1С:Документооборот реализована возможность вставлять штамп электронной подписи в подписанные документы. Однако, в процессе работы может возникнуть необходимость доработать штамп электронной подписи в документе. Как это сделать? Рассказываем.
За вставку подписи в документ отвечают два общих текстовых макета
Первый макет вставляет подпись вместо тега «ВставитьЭП», заданного в документе. Второй макет размещает подпись в соответствии с настройками, заданными в справочнике «Настройки электронной подписи и шифрования». Затем остается выбрать необходимый вариант вставки, например, «Левый нижний угол», или «Правый верхний угол» и т. д.
Вставка созданных шаблонов картинки электронной подписи, хранящихся в макете «ШаблонОтметкиЭП»(см. рис. 2), осуществляется с помощью DrawingML. DrawingML — это язык Open XML, предназначенный для определения графических объектов.
Вкратце, в макете нас интересуют 2 параметра cx и cy, которые отвечают за размер изображения. Здесь отмечаем, что значения задаются в EMU (English Metrick Units), которое высчитывается по формуле («РазмерВПикселях»/ 25.4) × 914400.
Далее, в картинку с помощью функции «СоздатьОтметкуЭП()» (см. рис. 3) общего модуля «РаботаСЭП» впечатывается текст с использованием ImageMagick. Настройки использования ImageMagick задаются непосредственно в конфигурации. Сама картинка хранится в формате png и может редактироваться в любом редакторе.
Это нужно, например, для того, чтобы добавить на подпись логотип. Размер текста, содержание, цвет, а также расположение указываются в «СоздатьОтметкуЭП()». Чтобы текст разместился по заданному шаблону, необходимо учитывать, что расположение задается от левого верхнего края.
Таким образом, после подписания документа, в зависимости от настроек, в него вставляется штамп электронной подписи.
Читайте также: