Штрихкодирование файлов формата PDF (1С "Документооборот КОРП 2.0")

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

Разработка - Практика программирования

штрихкод картинка вставить pdf документооборот штрихкодирование

26
Была поставлена задача обеспечить возможность штрихкодирования файлов формата PDF. Цель: проштрихкодировать попадающий в систему документ, который есть только в формате PDF (предоставлен контрагентом, счет на оплату и т.д.)

В конфигурациях 1С (например, "Документооборот") уже есть механизм генерации штрихкода и вставка его в документы распространенных форматов электронных документов. Как же вставить штрихкод в документ, который априори не предназначен для редактирования?

Рассматрев все стороны вопроса (покупка софта с возможностью редактирования файлов PDF, вставка картинки в PDF как бинарный файл), остановились на варианте использования утилит рапрастраняемых бесплатно.

Итак, формат PDF не предназначен для редактирования. Это формат файла для обмена печатными формами документов, который позволяет (в некоторой степени) быть уверенным, что в документ не внесут каких либо изменений. Можно преобразовать PDF в мультистраничный графический формат и графическими утилитами вставить штрихкод. Но в этом случае изменяется формат файла. Другой вариант - картинку штрихкода преобразовать в формат PDF и наложить два файла PDF друг на друга с помощью утилиты PDFtk.

Механизм опробован на конфигурации 1С "Документооборот КОРП 2.0" версии 2.0.19.1

В общем модуле "ШтрихкодированиеСервер" добавить функцию "ВставитьКартинкуВФайлPDF"

В общем модуле "ШтрихкодированиеКлиентСервер.ВставитьШтрихкодСИспользованиемНастроек" для расширения "PDF" вызывать новую функцию "ВставитьКартинкуВФайлPDF"

На сервере необходимо установить пару утилит. ImageMagick и pdftk_server
На момент написания были доступны такие версии:
ImageMagick-7.0.5-4-Q16-x64-static.exe
pdftk_server-2.02-win-setup.exe

Функция ВставитьКартинкуВФайлPDF(Расширение, ДвоичныеДанныеФайла, ДвоичныеДанныеКартинки, ДанныеОПоложении) Экспорт
   ИмяВременногоФайлаPDF = ПолучитьИмяВременногоФайла(Расширение);
    НовыйПутьКФайлу = ПолучитьИмяВременногоФайла(Расширение);
    ДвоичныеДанныеФайла.Записать(ИмяВременногоФайлаPDF);
  
    ИмяВременногоФайлаКартинки = ПолучитьИмяВременногоФайла("JPG");
    ДвоичныеДанныеКартинки.Записать(ИмяВременногоФайлаКартинки);
  
    ПоложениеНаСтранице = ДанныеОПоложении.ПоложениеНаСтранице;
    Гравити = "SouthWest";
  
   Попытка       СмещениеПоГоризонтали = Число(ДанныеОПоложении.СмещениеПоГоризонтали);
   Исключение   СмещениеПоГоризонтали = 0;
   КонецПопытки;
  
   Попытка       СмещениеПоВертикали = Число(ДанныеОПоложении.СмещениеПоВертикали);
   Исключение   СмещениеПоВертикали = 0;
   КонецПопытки;
  
    СмещениеПоГоризонтали = 20 + СмещениеПоГоризонтали;
    СмещениеПоВертикали = 10 + СмещениеПоВертикали;
    Пейдж = "A4-" + Строка(СмещениеПоГоризонтали) + "-" + Строка(СмещениеПоВертикали);
 
   Если ПоложениеНаСтранице = ПредопределенноеЗначение("Перечисление.ВариантыРасположенияШтрихкода.ПравыйНижний") Тогда
       Гравити = "SouthEast";
   ИначеЕсли ПоложениеНаСтранице = ПредопределенноеЗначение("Перечисление.ВариантыРасположенияШтрихкода.ПравыйВерхний") Тогда
       Гравити = "NorthEast";
   ИначеЕсли ПоложениеНаСтранице = ПредопределенноеЗначение("Перечисление.ВариантыРасположенияШтрихкода.ЛевыйВерхний") Тогда
       Гравити = "NorthWest";
   ИначеЕсли ПоложениеНаСтранице = ПредопределенноеЗначение("Перечисление.ВариантыРасположенияШтрихкода.ЛевыйНижний") Тогда
       Гравити = "SouthWest";
    КонецЕсли;
  
   Попытка
       ИМ = Новый COMОбъект("ImageMagickObject.MagickImage.1");
   Исключение
      ВызватьИсключение(НСтр("ru = 'Не обнаружен ImageMagick'"));
   КонецПопытки;
  
    ФайлPDFtk = Новый Файл("C:\Program Files (x86)\PDFtk Server\bin\pdftk.exe");
   Если НЕ ФайлPDFtk.Существует() Тогда
      ВызватьИсключение(НСтр("ru = 'Не обнаружен PDFtk'"));
   КонецЕсли;
  
    ИМ.Convert(ИмяВременногоФайлаКартинки, "-page", Пейдж, "-gravity", Гравити, ИмяВременногоФайлаКартинки + ".pdf");
  
    СтрКоманда = """C:\Program Files (x86)\PDFtk Server\bin\pdftk.exe"" """
       + ИмяВременногоФайлаPDF + """ multistamp """
       + ИмяВременногоФайлаКартинки + ".pdf"""
       + " output """ + ИмяВременногоФайлаPDF + ".pdf""";
     
    WshShell = Новый COMОбъект("WScript.Shell");
    Процесс = WshShell.Run(СтрКоманда, , Истина);
      
    УдалитьФайлы(ИмяВременногоФайлаPDF);
    УдалитьФайлы(ИмяВременногоФайлаКартинки);
    УдалитьФайлы(ИмяВременногоФайлаКартинки + ".pdf");
  
  Возврат ИмяВременногоФайлаPDF + ".pdf";
КонецФункции

ImageMagick конвертирует картинку в PDF, а PDFtk соединяет два файла PDF в один.

26

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

Комментарии
Избранное Подписка Сортировка: Древо
1. fomix 26 04.05.17 07:47 Сейчас в теме
А пример получившегося pdf документа можно в студию?
4. Goody 24 04.05.17 11:36 Сейчас в теме
2. kolya_tlt 20 04.05.17 08:54 Сейчас в теме
в системе же есть функционал добавление ШК в документ. мы на проекте добавили к word документу и сохранили его в pdf. получилось все легче и проще
3. Goody 24 04.05.17 11:19 Сейчас в теме
(2) Ну так это если есть документ формата WORD. А у нас есть моменты, когда исходный документ в PDF. Ситуация с точностью до наоборот же... :-)
5. LynxX 97 05.07.17 08:58 Сейчас в теме
Спасибо за идею !
Используем данный механизм при печати вложенных PDF файлов из Документооборота. Указываем в колонтитулах Имя пользователя, Дату и Время печати при выдаче в производство. Ушли от самонаборных печатей, мастера счастливы!!! Еще раз спасибо!
6. Soft-unity 18.09.17 15:19 Сейчас в теме
Ребята, помогите, пожалуйста. у меня выскакивает ошибка "Не обнаружен ImageMagick". Хотя он установлен, ImageMagickObject.dll зарегистрировал. Версия ImageMagick-7.0.7-2-Q16-x64-static.exe

С этим разобрался, а вот теперь 1С вылетает, никто не сталкивался с таким?)
11. rmarkovych 1 28.03.18 15:05 Сейчас в теме
(6) У меня похожая проблема. Не подскажете, как Вы разобрались и где была проблема?
13. pashamix 02.06.18 12:54 Сейчас в теме
(6)
Ребята, помогите, пожалуйста. у меня выскакивает ошибка "Не обнаружен ImageMagick". Хотя он установлен, ImageMagickObject.dll зарегистрировал. Версия ImageMagick-7.0.7-2-Q16-x64-static.exe

С этим разобрался, а вот теперь 1С вылетает, никто не сталкивался с таким?)


Как именно удалось разобраться? тоже пишет, что не обнаружен ImageMagick.
7. rmarkovych 1 22.12.17 13:04 Сейчас в теме
Здравствуйте! ДО 2.1.0.28
Вставил функцию, немного подшаманил с кодом, но не работает. Ошибок нет, но и штрихкода тоже...
Может не там, или не то.
Помогите, пожалуйста
ИначеЕсли Расширение = "pdf" Тогда
		ИмяФайла = ВставитьКартинкуВФайлPDF(Расширение,ДвоичныеДанныеФайла, ДвоичныеДанныеИзображения, НастройкиПоложения);
		Результат = Истина;
8. Goody 24 22.12.17 16:48 Сейчас в теме
(7)
ДвоичныеДанныеФайла, ДвоичныеДанныеИзображения

Под отладчиком посмотреть? "Подшаманил" - это может быть все что угодно )))
9. rmarkovych 1 22.12.17 20:13 Сейчас в теме
ДвоичныеДанныеФайла и ДвоичныеДанныеИзображения - не пустое значение. Расширение - pdf. По "подшаманил" я подразумевал не Вашу функцию, а там, где идет проверка на Расширение. Но под отладчиком в Вашу функцию попасть не могу, "проскакиват" ее
10. Goody 24 07.02.18 14:24 Сейчас в теме
включите отладку на сервере.
12. rmarkovych 1 29.03.18 09:50 Сейчас в теме
Всем спасибо. Заработало!
15. rmarkovych 1 22.03.19 09:33 Сейчас в теме
(12) Общем модуле в функции ШтрихкодированиеКлиентСервер после проверки на Расширение = "docx" добавил

ИначеЕсли Расширение = "pdf" Тогда
ИмяФайла = ВставитьКартинкуВФайлPDFСоШтампом(Расширение,ТекстНадписи, ДвоичныеДанныеФайла, ДвоичныеДанныеИзображения, НастройкиПоложения);
ДвоичныеДанныеФайлаЗаполненогоФайла = Новый ДвоичныеДанные(ИмяФайла); 
АвтозаполнениеШаблоновФайловСервер.ОбновитьВерсиюИзДвоичныхДанных(ДвоичныеДанныеФайлаЗаполненогоФайла, Объект, "Вставка регистрационного штампа", УникальныйИдентификатор);
Результат = Истина;
14. pashamix 19.06.18 01:34 Сейчас в теме
Кто подскажет, как через COM из 1С выполнить команды
convert IMG_0001.JPG -gravity NorthWest -splice 53x11 -gravity NorthEast -splice 53x12 IMG_0001.JPG
convert IMG_0001.JPG -gravity North -annotate +0+0 "текст вставки" IMG_0001.JPG

Т.е сделать аналогично этому
ИМ.Convert(ИмяВременногоФайлаКартинки, "-page", Пейдж, "-gravity", Гравити, ИмяВременногоФайлаКартинки + ".pdf");
Оставьте свое сообщение

См. также

[СКД] Программное создание схемы компоновки данных
292

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    4031    John_d    18       

Перенос данных УПП 1.3 => ERP 2 (ЕРП) / УТ 11 / КА 2.х (обработка переноса документов, остатков и справочников из "1С:Управление производственным предприятием, ред. 1.3" в ERP / УТ 11 / КА 2). Обновлен до УПП 1.3.130.х, КА 2.4.11.х и ERP 2.4.11.х! Промо

Обработка позволяет переносить из УПП 1.3 в ERP 2 документы за выбранный период и остатки. Типовая обработка от фирмы 1С документы не переносит. Также исправлены ошибки типовой обработки. При выходе новых релизов обновление высылается бесплатно в течение года. Разработка будет полезна фирмам-франчайзи, которые периодически выполняют такой перенос данных для заказчиков. Вы можете один раз приобрести обработку переноса, и потом бесплатно получать обновления при выходе новых релизов конфигураций 1С.

29700 руб.

30 задач. Странных и не очень
117

Статья Программист Стажер Нет файла v8 Бесплатно (free) Практика программирования

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    7993    YPermitin    71       

Онлайн-курс «Практические аспекты внедрения регламентированного учета и расчета себестоимости в 1С:ERP на крупных промышленных предприятиях» с 17 февраля по 13 марта 2020 года. Промо

Курс рассчитан для подготовки экспертов по регламентированному учету и учету затрат для внедрения на крупных промышленных предприятиях с «исторически сложившимся» учетом

9000 рублей

Агрегатные функции СКД, о которых мало кто знает
393

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    20706    ids79    45       

PgConf.Russia 2020. 3-5 февраля 2020 г. Москва. Промо

PGConf.Russia – международная техническая конференция по открытой СУБД PostgreSQL, ежегодно собирающая более 700 разработчиков, администраторов баз данных и IT-менеджеров для обмена опытом и профессионального общения. Для участников сообщества infostart.ru скидка 5% на участие в конференции.

от 12350 рублей

Три костыля. Сказ про фокусы в коде
131

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    12932    YPermitin    69       

Отслеживание выполнения фонового задания
155

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции Разработка

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    16190    ids79    16       

Онлайн-курс "Подготовка к экзамену 1С:Эксперт и 1С:Профессионал по технологическим вопросам" с 7 по 24 апреля 2020 г. Промо

На курсе вы получите практические навыки решения задач производительности 1С, в том числе характерных для высоконагруженных информационных систем (более 1000 пользователей). Подготовка к экзамену – только одна из составляющих курса. 70% слушателей приходят за знаниями, которые позволят расти и зарабатывать, делать сложные задачи на крупных проектах.

16450 рублей

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив
295

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    26359    ids79    34       

Фоновое выполнение кода в 1С - это просто
150

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019    16253    avalakh    21       

INFOSTART MEETUP Krasnodar. 14 февраля 2020 г. Промо

Краснодар станет первым в 2020 году местом, где пройдет региональная встреча IT-специалистов сообщества Инфостарт. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Стоимость участия - 5000 рублей. Цена действительна до 26.12.2019.

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты
153

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    22413    ids79    8       

Открыто голосование за доклады на INFOSTART MEETUP Krasnodar Промо

Выбирайте и голосуйте за самые интересные доклады, лучшие из них попадут в окончательную программу митапа. Голосование продлится до 30 января 2020 года.

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ
163

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Инструментарий разработчика Практика программирования

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    17090    ids79    27       

Регистры сведений. За кулисами
134

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    13317    YPermitin    12       

Базовый курс по управлению ИТ-проектами. Курс проходит с 26 февраля по 22 апреля 2020 года. Промо

Отличительная черта курса - органичное сочетание трех вещей: 1.Теория проектного управления (PMI®+Agile Alliance+Российские ГОСТ+Методологии от 1С); 2. Опыт внедрения продуктов 1С (опыт франчайзи и успешных компаний + тренды Infostart Event и Agile Days); 3. Разбор реальных проблем и рекомендации экспертов по проектам слушателей. Мы будем фиксироваться на тех инструментах, которые реально оказываются полезными в практике руководителей проектов внедрения. Ведущая курса - Мария Темчина.

от 11000 рублей

"Меньше копипаста!", или как Вася универсальную процедуру писал
185

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    11440    SeiOkami    49       

Создание отчетов с помощью СКД - основные понятия и элементы
226

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Математика и алгоритмы

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    28631    ids79    17       

INFOSTART MEETUP Kazan. 13 марта 2020 г. Промо

Инфостарт продолжает путешествие по России. Следующая остановка - Казань. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Ждем всех: докладчиков и участников! Стоимость участия - 5 500 рублей. Цена действительна до 30.01.2020

5 500

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017
181

Статья Программист Нет файла v8 v8::Запросы Бесплатно (free) Практика программирования Разработка

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    15744    dmurk    144       

Регистры накопления. Структура хранения в базе данных
181

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    24823    YPermitin    27       

Управление ИТ-проектами. Модуль 2: продвинутый онлайн-курс по классическим методам управления проектами. Вебинары проходят с 12 марта по 11 июня 2020 года. Промо

Продвинутый онлайн-курс по классическому управлению ИТ-проектами позволит слушателям освоить инструменты из PMBoK® и 1С:Технологии корпоративного внедрения и научиться их применять для проектов любого масштаба. Курс включает в себя 12 вебинаров и 12 видеолекции, разбор кейсов и рекомендации экспертов по проектам слушателей. Ведущая курса - Мария Темчина.

от 13000 рублей

Выполнение внешней обработки в фоновом задании
154

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    15787    Eret1k    23       

Выгрузка документа по условию
5

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    8797    m-rv    2       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Как прикрутить ГУИД к регистру сведений
23

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    11758    m-rv    16       

О расширениях замолвите слово...
200

Статья Программист Стажер Нет файла v8 Бесплатно (free) Практика программирования Разработка

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    21392    ellavs    125       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Git-репозитории для 1С-кода (опыт использования при небольших проектах)
206

Статья Программист Стажер Нет файла v8 Windows Бесплатно (free) Практика программирования Разработка

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    17365    ellavs    83       

Трюки с внешними источниками данных
169

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    18958    YPermitin    53       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.