Вставка штампа в файлы PDF

Публикация № 1324348

Управление - Документооборот и делопроизводство

Входящий PDF штамп

Как неправильно регистрировать входящие документы? Надо распечатать сопроводительное письмо, зарегистрировать документ в программе, на бумажном носителе поставить штамп, вписать номер и дату и заново отсканировать документ в карточку входящего письма. А как правильно?

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

Сразу оговорюсь, что работу коллеги видел, но его метод мне не подошёл по 2-м причинам:

  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).

magick convert -density 200 “ПутьКВременномуКаталогу\image_%06d.jpg”

Данная команда создаёт файлы в формате jpeg с разрешением 200 dpi и автонумерацией от «000000» до «999999» в нашем каталоге. Удобство в том, что имя файла первой страницы всегда «image_000000.jpg». Запаса нумерации страниц должно хватить на все случаи жизни.

2. Создаём файл штампа. Тут может быть два решения, через параметр «-draw text x,y”, т. е. вставкой необходимого текста прямо на первую страницу документа или более сложный, но и более универсальный механизм создания штампа отдельно и впечатывания его куда нужно. Я пошёл вторым путём, хотя и с первым тоже поигрался (трудно выравнивать текст).

magick convert -size 472x157 -background #FFFFFF80 -gravity center -fill blue -font c:\windows\fonts\tahoma.ttf -pointsize 30 -interline-spacing 15 label:@text.txt stamp.png

Эта команда создаёт изображение размером 472х157 (60х20 мм при 200 dpi), с полупрозрачным фоном, синим цветом текста, выровненным по центру, шрифтом Tahoma размером 30 точек и межстрочным интервалом 15 точек и текстом, который лежит в файле text.txt. Я экспериментировал с разными шрифтами, есть очень интересные начертания, хорошо смотрятся на штампе. Можно отсканировать реальный штамп, подобрать шрифт, имитирующий рукописный, и через «-draw text x,y” впечатывать номер и дату. Очень круто, но много возни.

3. Определяем координаты вставки штампа. Тут нам помогает тип «Картинка», который после чтения первой страницы изображения, возвращает нам его размеры. А настройки вставки штампа мы берём из штатного параметра «НастройкиПоложения», который нам приходит из процедуры вставки штампа (мы его совсем немного дополняем). Там простая математика, не буду тут разбирать.

4. Впечатываем штамп.

magick convert image_000000.jpg stamp.png -geometry +2011+3200 -composite result.jpg

Команда к файлу «image_000000.jpg» прибавляет файл «stamp.png» со смещением 2100 и 3200 точек (для примера) и результат сохраняет в «result.jpg».

5. Собираем результат. Переименовываем «result.jpg» в «image_000000.jpg» собираем все файлы в один.

magick convert “ПутьКВременномуКаталогу\image_*.jpg" -adjoin -quality 90 result.pdf

Команда из файлов image_*.jpg собирает один файл в формате Adobe PDF с понижением качества до 90%.

6. Ну и всё, уже в рамках штатного механизма создаём новую версию файла.

Наименование организации для удобства вынес в новый реквизит справочника «Организации» и разместил на форме.

Теперь про боль. Всё бы ничего, но некоторые документы, приходящие в организацию обрабатывались некорректно. После преобразования в jpeg документ становился серым и в нём пропадала часть текста. Что делать? Оказалось, что есть более специализированный конвертер, написанный в рамках проекта XPDFReader. Он работает быстро и делает изображения в формате PNG с нужным разрешением. Исполняемый файл pdftopng.exe я в расширение не включил (блюдём авторские права), его нужно скачать на сайте разработчика, поместить в макет «ШРВД_ПрограммаКонвертации» и установить в значение «Истина» переменные «ПредварительноКонвертировать» и «ПрограммаКонвертацииВМакете». Можно не в макет помещать, а на диск куда-нибудь сохранить и тогда путь необходимо указать в настройках, а переменной «ПрограммаКонвертацииВМакете» оставить значение «Ложь».

// PDF не всегда корректно конвертируется
// можно использовать предварительную конвертацию
ПредварительноКонвертировать = Ложь;
ПрограммаКонвертацииВМакете  = Ложь; 

Все основные настройки вынесены в переменные расположенные в начале процедуры «ВставитьРегистрационныйШтампВФайлУказаниемПоложения()» общего модуля «ШРВД_ОбщиегоНазначенияСервер». Там указывается разрешение, размеры штампа, шрифт, его размер и межстрочный интервал.

Расширение разрабатывалось и тестировалось на платформе версии 8.3.16.1830 в конфигурации Документооборот государственного учреждения, редакция 2.1.24.1.

Скачать файлы

Наименование Файл Версия Размер
Вставка штампа в файлы PDF (без конвертера):

.cfe 66,13Kb
15
.cfe 1.0.2.11 66,13Kb 15 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. user1469772 20.01.21 03:07 Сейчас в теме
Сергей, интересна ваша разработка, напишите, пожалуйста, мне в личку.
Оставьте свое сообщение