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

10.12.23

Функциональные - Документооборот и делопроизводство (СЭД)

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Вставка штампа в файлы PDF (без конвертера):
.cfe 71,01Kb ver:1.W.3.5
155
155 Скачать (1 SM) Купить за 1 850 руб.
Вставка штампа в файлы PDF (версия для Linux):
.cfe 71,25Kb ver:1.L.3.8
4
4 Скачать (1 SM) Купить за 1 850 руб.

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

Сразу оговорюсь, что работу коллеги видел, но его метод мне не подошёл по 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.17.1851 в конфигурации 1С:Документооборот государственного учреждения, редакция 2.1.28.12.

Адаптация для Linux производилась на платформе 8.3.22.1923 в конфигурации Документооборот государственного учреждения, редакция 2.1.32.6

 
 Дополнение для тех, у кого Линукс. 

Инструкция актуальна для Astra Linux 1.7 (ядро 5.4.0), для других дистрибутивов будет незначительно отличаться.
Первым делом нужно раздобыть ImageMagick версии 7, в Астре только 6-я и выше пока не предвидится, а Документооборот не умеет работать с 6-й версией. Но на сайте разработчика есть полноценное портативное приложение, его качаем и кладём в удобное место. Я все файлы складывал в домашнюю папку пользователя usr1cv8, от его имени работает сервер 1С и он точно туда имеет доступ. Идём в настройки программы -> работа с файлами, ставим галку «Использовать ImageMagick» и пишем путь /home/usr1cv8/magick (можно ~/magick), а если поставить галочку «Использовать Ghostscript», то заведётся сканирование в с клинских машин PDF.
Для полного счастья нужен конвертер pdftopng для Linux. Он есть на сайте разработчика в пакете xpdf-tools-linux. Качаем, распаковываем в домашнюю папку.
Теперь, что касается шрифтов, у меня нормально работает, если указать полный путь к шрифту. Системные шрифты лежат тут /usr/share/fonts, можно просто отдельно положить файл шрифта.
Обязательно проверяем, чтобы у файлов magick и pdftopng владельцами был пользователь usr1cv8, группа grp1cv8 и для пользователя были даны права на запуск (команды chown и chmod).
Теперь в модуле расширения ШРВД_ОбщиегоНазначенияСервер с процедуре ВставитьРегистрационныйШтампВФайлУказаниемПоложения указываем путь к файлу шрифта. В расширении прописан путь к одному из системных шрифтов.
Если нужно, проверяем путь к программе предварительной конвертации. Вот и всё.

 
 Дополнение для тех, у кого под Линукс пропадают надписи

Инструкция для Astra Linux 1.7 (ядро 5.4.0).

Формат PDF предполагает наличие 14-ти базовых шрифтов, наличие которых проверяется при запуске приложения pdftopng. Если их нет, то приложение об этим пишет. Чтобы увидеть список шрифтов, котороых не хватает, нужно перехватить в отладчике команду конвертации из PDF в PNG и выполнить в контексте пользователя USR1CV8. Среди этих базовых шрифтов два свободно распростаняемые, а вот остальные совершенно несвободные и в российских дистрибутивах отсутствующие. Тут написано где взять первые два и как писать конфиг, остальные можно поискать на машинах под управлением Windows (но это наверное не законно :-) и в Инете, потом складываем все находки в отдельную папочку и дописываем конфиг примерно так:

fontFile Symbol "/home/usr1cv8/pdftopng.fonts/s0500001.pfb"
fontFile ZapfDingbats "/home/usr1cv8/pdftopng.fonts/d050000.pfb"

fontFile Times-Roman "/home/usr1cv8/pdftopng.fonts/times.ttf"
fontFile Times-Bold "/home/usr1cv8/pdftopng.fonts/timesdb.ttf"
fontFile Times-BoldItalic "/home/usr1cv8/pdftopng.fonts/timesbi.ttf"
fontFile Times-Italic "/home/usr1cv8/pdftopng.fonts/timesi.ttf"

fontFile Courier "/home/usr1cv8/pdftopng.fonts/cour.ttf"
fontFile Courier-Bold "/home/usr1cv8/pdftopng.fonts/courdb.ttf"
fontFile Courier-BoldOblique "/home/usr1cv8/pdftopng.fonts/courbi.ttf"
fontFile Courier-Oblique "/home/usr1cv8/pdftopng.fonts/couri.ttf"

fontFile Helvetica "/home/usr1cv8/pdftopng.fonts/HelveticaRegular.ttf"
fontFile Helvetica-Bold "/home/usr1cv8/pdftopng.fonts/HelveticaBold.ttf"
fontFile Helvetica-BoldOblique "/home/usr1cv8/pdftopng.fonts/HelveticaBoldItalic.ttf"
fontFile Helvetica-Oblique "/home/usr1cv8/pdftopng.fonts/HelveticaItalic.ttf"

Теперь конвертер понимает какими шрифтами ему рисовать символы при преобразовании страницы документа в картинку и текст не пропадает.

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

// предварительная обработка
Если ПредварительноКонвертировать И ВРег(Расширение) = "PDF" Тогда
	Команда = ПрограммаКонвертации +  " -r " + Строка(Разрешение) + " -q -cfg pdftopng.xpdfrc """ + ИмяВходногоФайла + """ "
		+ """" + КаталогФайлаПолистного + "preimage"""; // формируются файлы preimage-000000.png
	ЗапуститьПриложение(Команда, КаталогВременныхФайлов(), Истина);
	// проверяем, всегда должен быть файл preimage-000001.png
	ПредварительныйФайл = Новый Файл(КаталогФайлаПолистного + "preimage-000001.png");
	Если Не ПредварительныйФайл.Существует() Тогда 
		ЗаписьЖурналаРегистрации("Вставка регистрационного штампа",
			УровеньЖурналаРегистрации.Ошибка,,,
			"При выполнении команды " + Команда + ", файл " + ПредварительныйФайл.ПолноеИмя + " не был создан (т.е. команда не отработала)");
		ВызватьИсключение "Ошибка конвертации файла";	
	КонецЕсли;
	// пережимаем в jpeg для экономии места (утверждение спорное, всё зависит от контента)
	Команда = ПутьКImageMagick + " convert -density " + Строка(Разрешение) + " -units PixelsPerInch """ 
		+ КаталогФайлаПолистного + "preimage-*.png" + """ "
		+ """" + КаталогФайлаПолистного + "image_%06d.jpg""";
Иначе	
	// формируем и запускаем команду
	Команда = ПутьКImageMagick + " convert -density " + Строка(Разрешение) + " -units PixelsPerInch """ 
		+ ИмяВходногоФайла + """ " + """" + КаталогФайлаПолистного + "image_%06d.jpg"""; 
КонецЕсли;

 

UPD: 08.02.2021 исправлена ошибка постановки штампа на обычное изображение и появилась возможность делать рамку вокруг штампа.

UPD: 03.07.2021 исправлена ошибка постановки штампа на не первую страницу документа, также мелкие доработки по результатам использования в организации.

UPD: 20.09.2023 добавлена версия для Linux и инструкция по установке

UPD: 10.12.2023 добавлено решение проблемы со шрифтами

Проверено на следующих конфигурациях и релизах:

  • Документооборот КОРП, релизы 2.1.32.6

Входящий PDF штамп ImageMagick Linux Линукс

См. также

Документооборот и делопроизводство (СЭД) Типовые Бухгалтер Пользователь Руководитель проекта Платформа 1С v8.3 Управленческий учет Платные (руб)

Организуйте правильный оборот документов на вашем предприятии в 1С. Ведение учета и хранения документов. Управление потоками документации между подразделениями. Работа с договорами в компании. Автоматизация процессов подготовки, согласования и подписания документов. Сократите время и объем ошибок с 1С:ДО!

48500 руб.

19.02.2016    108652    123    5    

98

SALE! 30%

Загрузка и выгрузка в Excel Документооборот и делопроизводство (СЭД) Учет документов Распознавание документов и образов Бухгалтер Пользователь Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная программа для распознавания сканов или фото товарных документов в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

8400 5880 руб.

04.06.2019    107328    313    173    

326

Документооборот и делопроизводство (СЭД) Бухгалтер Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Продукт "Апрель Софт: Бухгалтерия позаказного производства, ред. 3.0" предназначен для удобного и оперативного управления процессами производства, отгрузок и снабжения в производственных компаниях. Программный продукт открывает новые функциональные возможности для ведения документооборота.

11400 руб.

18.02.2016    22978    1    1    

5

Документооборот и делопроизводство (СЭД) Мессенджеры и боты Учет документов Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 Платные (руб)

Расширение для согласования справочников и документов в основных типовых конфигурациях. Ролевая адресация, условная маршрутизация, чат-бот telegram, интеграция с n8n, последовательное и параллельное согласование, уведомление о новых задачах на почту, блокировка объектов в зависимости от статуса, запрет проведения в зависимости от статуса, автозапуск процессов согласования, отчеты по исполнительской дисциплине. Не требуется снятие конфигурации с поддержки. Настройка без программирования. Версия для 1cfresh.com. Сертификат 1С-Совместимо.

14900 руб.

15.11.2018    30403    35    49    

71

Документооборот и делопроизводство (СЭД) ЭДО и ОФД Учет документов Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Мощный, единый инструмент для решения всех проблем, связанных с переходом на ЭДО. Экономит бумагу и время - организует архив оригиналов первичных документов прямо в базе 1С, в прикрепленных файлах к соответствующим документам. С помощью комплексного отчета по ошибкам в ЭДО позволяет выявить и исправить все возможные ошибки - ошибочно сопоставленные документы, не подписанные документы, подписанные, но не загруженные в 1С документы. Автоматически сопоставляет не сопоставленные между собой документы. Может работать по расписанию и присылать отчет о состоянии архива/по ошибкам на почту. Взаимодействует напрямую с сервисами Диадок/СБИС, имеет интуитивно понятный интерфейс и учитывает 3-х летний опыт 40+ клиентов.

14880 руб.

17.12.2018    45716    65    59    

79

Печатные формы Документооборот и делопроизводство (СЭД) Учет документов Бухгалтер Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Бухгалтерский учет Управленческий учет Платные (руб)

Приложение для быстрого создания макетов печатных документов, заполняемых из 1С:Предприятие, без привлечения программистов и запуска конфигуратора. Шаблон готовится в редакторе MS Word, отлично освоенном офисными служащими. Так, на подготовку нового шаблона договора купли продажи со спецификацией потребуется 25 минут. Приложение будет полезно, если Вы работаете со множеством Word-шаблонов или если Вам надо часто создавать новые шаблоны. Есть сертификат "1С: Совместимо!". Версия ПРОФ доступна в виде расширения.

2000 руб.

05.09.2017    92643    66    98    

100

Загрузка и выгрузка в Excel Документооборот и делопроизводство (СЭД) Учет документов Бухгалтер Пользователь Платформа 1С v8.3 1С:Документооборот Россия Управленческий учет Платные (руб)

Внешняя обработка "загрузка внутренних документов из Excel в 1С Документооборот 8", позволяет по заданному шаблону загрузить внутренние документы в конфигурацию в режиме управляемого приложения. Также есть возможность загружать файлы внутренних документов.

3600 руб.

14.03.2014    40637    31    17    

31
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. i_cherepkov 20.01.21 03:07 Сейчас в теме
Сергей, интересна ваша разработка, напишите, пожалуйста, мне в личку.
2. Andrei_Ivanov 177 18.03.21 19:42 Сейчас в теме
Добрый день. Скачал XPDFReader. Файла pdftopng.exe нет. Есть файл xpdf.exe. Указал в коде путь к нему. Команда преобразования файла не отрабатывает - файл не конвертирует. Подскажите, пожалуйста, в чем может быть дело ?
3. soulner 462 18.03.21 21:43 Сейчас в теме
(2) Скачивать надо Xpdf command line tools (тут) и там в папочке bin32/64 будет утилита pdftopng.exe.
Эта утилита нужна только если ImageMagic не справляется.
Andrei_Ivanov; +1 Ответить
4. Andrei_Ivanov 177 19.03.21 10:16 Сейчас в теме
(3) Спасибо. Очень помогли.
5. prostovalera1 25.03.21 11:45 Сейчас в теме
Добрый день.
Есть ли возможность управления цветом штампа?
6. soulner 462 25.03.21 21:55 Сейчас в теме
(5) Да, конечно. В команде magick convert -size 472x157 -background #FFFFFF80 -gravity center -fill blue -font c:\windows\fonts\tahoma.ttf... blue - это как раз цвет. Его можно и в RGBA вводить и по именам.
7. Xleo777 48 19.05.21 17:13 Сейчас в теме
Добрый день!
Спасибо за функционал! Очень интересное решение!

Скажите, пожалуйста, почему в результате в версии файла может получится файл с лиловой заливкой и тремя изображениями исходного pdf с вставленным штампом?
Во временных файлах все красиво и правильно,
но после использования процедуры АвтозаполнениеШаблоновФайловСервер.ОбновитьВерсиюИзДвоичныхДанных(ДвоичныеДанныеРезультат, Файл, "Вставка регистрационного штампа"); версия получается "кривая".
8. soulner 462 20.05.21 11:21 Сейчас в теме
(7) Добрый день, давайте разбираться.
1. какой тип файла документа, на который ставите штамп? (Adobe PDF мной тестировался хорошо, а графические форматы не очень)
2. файл в формате Adobe PDF собирается из изображений формата jpeg командой magick convert "image_*.jpg" -adjoin -quality 90 ..., т.е. из всех файлов, соответствующей маске image_*.jpg во временной папке КаталогФайлаПолистного. По этому нужно поставить точку останова в конце процедуры ВставитьРегистрационныйШтампВФайлУказаниемПоложения() общего модуля расширения ШРВД_ОбщиегоНазначенияСервер, но до команды УдалитьФайлы(КаталогФайлаПолистного); (или на ней) и посмотреть, какие файлы image_*.jpg содержатся в каталоге.
3. дальше по результату п.2

Команда АвтозаполнениеШаблоновФайловСервер.ОбновитьВерсиюИзДвоичныхДанных() работает уже с двоичными данными файла и не может их поменять.
9. Xleo777 48 21.05.21 16:24 Сейчас в теме
(8)
Добрый день!
1. Вставляем штамп в файл формата PDF
2. Похоже, дело было в том, что Разрешение полученного файла сильно отличалось от разрешения штампа. Когда поставили разрешение 400 файл хотя бы стал нормальным. Но размер файла увеличился.
Разбираемся дальше
10. soulner 462 22.05.21 10:02 Сейчас в теме
(9) Погодите, разрешение в данном случае не играет роли. Оно содержится в метаданных изображения и используется для масштабирования при печати. Вся обработка производится по точкам. Но разрешение штампа должно быть равно разрешению изображений.
11. yakutskteplo 30.08.21 07:10 Сейчас в теме
Все работает, но
1. Перед надписью названия организации ставит вопросительный знак.
2. И можно ли надпись обвести рамкой?
12. soulner 462 30.08.21 13:05 Сейчас в теме
(11) 1. Это странно. Название организации берётся из реквизита ШРВД_ТекстДляШтампа, добавляемого к справочнику Организации.
За вставку названия организации отвечает строка
ТекстШтампа.Записать(ТекстНадписи.Организация.ШРВД_ТекстДляШтампа + Символы.ПС);

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

2. Там же есть переменная Рамка, которая отвечает за рамку штампа
Рамка				= Ложь; // делать у штампа рамку
13. user1437374 08.07.22 17:01 Сейчас в теме
приятного времени суток.
Документ весь залился красным цветом.
Как это исправить?)
Прикрепленные файлы:
gla.pdf
14. soulner 462 09.07.22 13:23 Сейчас в теме
(13) Добрый день. Очень странный у вас файл получился. Попробуйте взять пустой лист MS Word (или другого редактора) и сделать из него pdf. Разрешение пусть будет 200 dpi. Потом на этот пустой лист поставить штамп. Дальше изучаем ситуацию по инструкции поста № 8
15. Потап 02.08.22 16:36 Сейчас в теме
День добрый. Не подскажете почему название организации не прописывает?
16. soulner 462 03.08.22 09:50 Сейчас в теме
(15) Добрый день. На форму справочника "Организации" расширением выводится реквизит, на форме он называется "Текст для штампа", там должно быть указано краткое название организации для вывода в шапку штампа.
17. R2D2 13.09.22 10:44 Сейчас в теме
(15) Подскажите, на каком релизе Вы применили это расширение? На 2.1.31.5? У нас такой, хотелось бы узнать, подойдёт ли
18. Потап 13.09.22 12:11 Сейчас в теме
(17)Документооборот 8 КОРП, редакция 2.1 (2.1.31.5)
19. soulner 462 13.09.22 14:33 Сейчас в теме
(17) В статье указано, что на ДГУ 2.1.28.12.
20. R2D2 14.09.22 17:20 Сейчас в теме
(19) Какое Вам спасибо за статью и обработку! У меня все получилось на 2.1.31.5 (платформа 1С:Предприятие 8.3 (8.3.20.1914)). Сначала на pdf от ведомств с ЭЦП которые - был наполовину черный файл, но описание сторонней программки и комментарии помогли - теперь и на крутые файлы из Министерств тоже проставляется штамп.
21. user1437374 10.11.22 11:13 Сейчас в теме
Приятного времени суток.
подскажите пожалуйста в чем может быть проблема
Ошибка конвертации файла
{ШтампРегистрацииВходящихДокументов ОбщийМодуль.ШРВД_ОбщиегоНазначенияСервер.Модуль(65)}:ВызватьИсключение "Ошибка конвертации файла";
{ШтампРегистрацииВходящихДокументов ОбщийМодуль.ШтрихкодированиеКлиентСервер.Модуль(21)}:ДвоичныеДанныеЗаполненногоФайла = ШРВД_ОбщиегоНазначенияСервер.ВставитьРегистрационныйШтампВФайлУказаниемПоложения(Расширение, ТекстНадписи, ДвоичныеДанныеФайла, НастройкиПоложения);
{ОбщийМодуль.ШтрихкодированиеСервер.Модуль(1003)}:Возврат ШтрихкодированиеКлиентСервер.ВставитьРегистрационныйШтампСИспользованиемНастроек(ТекущийФайл,
{ОбщийМодуль.ШтрихкодированиеКлиент.Модуль(355)}:Результат = ШтрихкодированиеСервер.ВставитьРегистрационныйШтамп(ТекущийФайл, ДанныеОШтрихкодеФайла, ТекстНадписи);
{ОбщийМодуль.ШтрихкодированиеКлиент.Модуль(54)}:ВыполнитьОбработкуОповещения(ОписаниеОповещения, НастройкиШтрихкода)
{ШтампРегистрацииВходящихДокументов ОбщаяФорма.ВыборВариантаРасположенияПриПечати.Форма(71)}:Закрыть(ДанныеОПоложении);
22. soulner 462 10.11.22 17:40 Сейчас в теме
(21) Добрый день. Данная ошибка возникает, когда у программы не получается разбить входной файл на изображения полистно. Там в результате должен получиться хотя бы один файл, а его нет. Т.е. входной файл должен содержать минимум одну страницу.
В журнале регистрации формируется более полный отчёт по ошибке, включая команду, которая отработала не корректно.
В коде программы, команда для ImageMagick формируется отдельно и хранится в переменной "Команда". Я это сделал специально для упрощения отладки, т.е. можно поставить точку останова в отладчике (у вас это строка 65), из переменной Команда получить текст команды и выполнить её в командной строке. И там увидеть какая конкретно ошибка возникает у конвертера.
23. user1437374 15.11.22 13:03 Сейчас в теме
(22) День добрый!
Подскажите пожалуйста, я правильно понимаю что у пользователя User_1C нет доступа на создание файла?
При выполнении команды "magick.exe" convert -density 200 -units PixelsPerInch "C:\Users\User_1C\AppData\Local\Temp\v8_B613_39.pdf" "C:\Users\User_1C\AppData\Local\Temp\v8_B613_3a\image_%06d.jpg", файл C:\Users\User_1C\AppData\Local\Temp\v8_B613_3a\image_000000.jpg не был создан (т.е. команда не отработала)
24. soulner 462 15.11.22 17:46 Сейчас в теме
(23) Это одна из причин, но не в вашем случае, т.к. был создан файл "C:\Users\User_1C\AppData\Local\Temp\v8_B613_39.pdf". Я бы посоветовал проверить путь к файлу magick.exe, похоже, что не запускается ImageMagick
36. oleggio345 04.02.23 00:02 Сейчас в теме
(24) Аналогично с (22) выдаёт, что команда не отработала. Копирую команду и выполняю из командной строки на сервере, проходит без ошибок, постраничный файл создаётся. Из кода 1С команда не выполняется. Сами понимаете, что пути верные, раз из командной строки выполняется без ошибок. Что может быть причиной? Понимаю, что что-то с правами, но не понимаю как исправить. Служба сервера работает с правами администратора, по идее выполнение команды из кода 1с на стороне сервера тоже происходит с правами администратора.
37. soulner 462 04.02.23 18:20 Сейчас в теме
(36) Да уж, не простая ситуация. Из вашего описания не понятно, какая конкретно команда выполняется, там может быть 2 варианта, но раз команда выполняется из консоли, значит она синтаксически верная. Могу предложить поэкспериментировать с перенаправление вывода команды в файл, а потом его прочитать.
Примерно так:
Команда = ПутьКImageMagick + " convert -density " + Строка(Разрешение) + " -units PixelsPerInch """ 
+ ИмяВходногоФайла + """ " + """" + КаталогФайлаПолистного + "image_%06d.jpg""" + " > result.txt"; 

После выполнения команды в файле result.txt должен быть текст ошибки.
25. ignor 237 24.11.22 07:28 Сейчас в теме
Добрый день, не пособите ли, не подскажете ли. Мне в очередной раз прилетела задача по визуализации ЭЦП в Документах ворда, екселя и собственно непосредственно в pdf-ках. Визуализацию мне предстоит делать не в ДГУ и не в Документообороте, а в БГУ и ЗГУ по люьым вложенным подписанным в них файлам (Справочник файлы). Подпись это не штамп и их может быть у файла несколько. А екселька это не документ и она может быть произвольного размера Может посоветуете как прикрутить magick.exe к моей ситуации. Он у заказчика установлен
26. soulner 462 29.11.22 10:22 Сейчас в теме
(25) Добрый день. Для разных типов файлов, нужно использовать разные механизмы. Для объекта ЗаписьPDF оказывается есть метод ЗаписатьПодпись() и там можно сделать присоединенную подпись и, что самое интересное, можно сгенерировать картинку в ImageMagic или табличный документ и сразу сформировать визуализацию. Там очень могучий функционал и, наверное, это самый правильный способ подписи PDF в 1С.
27. SvetLanaGil 15.12.22 09:30 Сейчас в теме
Добрый день. Спасибо большое за статью, ваше описание команд очень помогло разобраться в командах Image Magic, благодаря чему получилось исправить ошибки и внедрить у себя подобное решение. Очень полно и понятно все описано.
28. chg 02.01.23 07:29 Сейчас в теме
Добрый день.

В тройке не тестировали?
29. soulner 462 02.01.23 12:05 Сейчас в теме
(28) Добрый день. У меня клиенты пока на 2.1 сидят. Хочется переределать на механизм, указанный в (26), это будет более правильно. Можно совместить эти два направления.
30. soulner 462 03.01.23 15:27 Сейчас в теме
(29) Сам себе отвечу. Метод ЗаписатьПодпись() для объекта ЗаписьPDF не получится использовать. Там происходит повторное подписание документа, а из параметра ОписаниеПодписи берётся сертификат и по нему в хранилище сертификатов пользователя (или в системном) ищется установленный сертификат с закрытым ключом. Т.е. в нашем случае уже есть ЭП, но её внутрь PDF-документа запихнуть не получится.
31. odinarhitektor 09.01.23 17:48 Сейчас в теме
После вставки штампа, в некоторых случаях почему-то весь лист становится черным, не знаете в чем может быть проблема?
Прикрепленные файлы:
32. soulner 462 09.01.23 22:28 Сейчас в теме
(31) Добрый вечер. Я сталкивался с тем, что документ становился серым. Тут помогала утилита pdftopng. Где её взять есть в ответе на вопрос (2). Надо останавливать программу в отладчике и смотреть где появляется чёрный фон.
33. odinarhitektor 17.01.23 11:37 Сейчас в теме
34. odinarhitektor 25.01.23 15:08 Сейчас в теме
Добрый день!
подскажите, пожалуйста, не сталкивались ли Вы с тем, что нужно адаптировать размер штампа под размер страницы пдф?
пришел документ размером 1500х1500, в итоге штамп очень маленький и почти не виден...
35. soulner 462 25.01.23 16:15 Сейчас в теме
(34) Добрый день. Конечно слой изображения в pdf может быть разным и для этого программа устанавливает разрешение 200 dpi. Штамп тоже формируется в разрешении 200 dpi по размерам, которые указаны в настройках. Смещение штампа вычисляется в абсолютных значениях от фактического размера изображения. Надо смотреть какое разрешение стоит у вашего документа. Что указано в свойствах? Геометрические размеры связаны с размерами в пикселях как раз через разрешение. Если, предположим, у вас 10 dpi, тогда геометрический размер вашего изображения 150х150 дюймов, т.е. 381х381 см., соответственно штамп размером 60х20 будет очень маленьким.
38. user1437374 21.02.23 13:16 Сейчас в теме
Всем приятного времени суток!
Может кто подсказать как можно решить данную проблему?
Ошибка 1 при вызове ImageMagick с командной строкой:
"magick.exe" convert -strip -density 150 -quality 0 C:\Users\User_1C\AppData\Local\Temp\v8_965A_60\src.pdf C:\Users\User_1C\AppData\Local\Temp\v8_965A_60\res.png
Возможно, нарушена структура командной строки.
{ОбщийМодуль.РаботаСКартинками.Модуль(422)}: ВызватьИсключение ТекстИсключения;
{ОбщийМодуль.РаботаСКартинками.Модуль(51)}: ЗапуститьImageMagick(Параметры, ФайлыКУдалению);
{ОбщийМодуль.РаботаСФайламиВызовСервера.Модуль(3814)}: МассивПутейPng = РаботаСКартинками.ПреобразоватьPdfВPng(ИмяФайлаPdf, ВременнаяПапкаДляРазархивирования);
{ОбщийМодуль.РаботаСФайламиВызовСервера.Модуль(3663)}: ФайлВизуализация = ПолучитьВизуализациюЭП(ДанныеФайла, ИдентификаторФормы);
{ОбщийМодуль.РаботаСФайламиВызовСервера.Модуль(3418)}: ДобавитьВизуализациюЭП(ДанныеФайла, ИдентификаторФормы);
{ОбщийМодуль.РаботаСФайламиКлиент.Модуль(10219)}: ДанныеФайла = РаботаСФайламиВызовСервера.ДанныеФайлаДляОткрытия(
{Справочник.ИсходящиеДокументы.Форма.ФормаЭлемента.Форма(4059)}: РаботаСФайламиКлиент.ОткрытьФайлДокумента(Строка.Ссылка, ЭтаФорма);
Оставьте свое сообщение