1С 8.3 PDF - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 PDF

В 1С 8.3 есть возможность создания и обработки документов в PDF. Объекты конфигурации: документы и отчёты, могут быть экспортированы в формат PDF. Прямо в платформе можно создавать и редактировать документы в формате PDF, а также подписывать их ЭЦП. PDF (Portable Document Format) - это формат файлов, который был разработан компанией Adobe Systems в 1993 году. Он предназначен для представления документов в электронном виде с сохранением их внешнего вида и структуры. Для работы с PDF-документами вне 1С, рекомендую использовать бесплатную программу Adobe Acrobat Reader или платную Foxit PhantomPDF.

Начиная с релизов 8.3.21, 8.3.22 разработчики платформы разнообразили программный функционал по работе с файлами *.pdf через ДокументPDF. А в версию 8.3.26 интегрирована возможность получения размера страницы (будет дополнено с выходом релиза). По данной статье к скачиванию доступна обработка Работа с форматом PDF (мини-шпора).
Просмотр PDF в 1С 8.3:
&НаКлиенте
Процедура ПросмотрPDF(Команда)

   ИмяФайлаРус = (ТРег(Транслит(ФайлPDF.ИмяБезРасширения, Истина)))
   +" ("+ФайлPDF.ИмяБезРасширения+")"; // например: Договор (Dogovor)

   PDF = Новый ДокументPDF();
   PDF.ПрочитатьАсинх(ПутьКФайлуPDF); // чтение с диска или потока. Можно указать пароль
   // PDF.Прочитать(ПутьКФайлуPDF);
   PDF.Показать(ИмяФайлаРус); // с 8.3.22

КонецПроцедуры
Получить атрибуты PDF в 1С 8.3:
&НаКлиенте
Процедура ПолучитьАтрибутыPDF(Команда)

   PDF = Новый ДокументPDF();
   PDF.Прочитать(ПутьКФайлуPDF); // чтение с диска или потока. Можно указать пароль
   Сообщить("Атрибуты "+ПутьКФайлуPDF+":"); // с 8.3.21
   Сообщить(" ...кол. страниц =  "+PDF.КоличествоСтраниц()); // с 8.3.21 Количество страниц в PDF-документе.
   Сообщить(" ...тип документа =  "+PDF.ТипФайла); // с 8.3.21 Варианты типов файлов PDF-документа.
   Сообщить(" ...кол. вложений =  "+PDF.Вложения.Количество()); // с 8.3.21 Кол. вложений PDF-файлов

КонецПроцедуры
Преобразовать PDF в оттенки серого в 1С 8.3:
&НаКлиенте
Процедура ПреобразоватьВОттенкиСерогоPDF(Команда)

   PDF = Новый ДокументPDF();
   PDF.ПреобразоватьВОттенкиСерого(); // работает и с ЗаписьPDF
   Сообщить(ПутьКФайлуPDF+" преобразован в серый"); // с 8.3.22

КонецПроцедуры
Печать PDF в 1С 8.3:
&НаКлиенте
Процедура ПечатьPDF(Команда)

   PDF = Новый ДокументPDF();
   PDF.Прочитать(ПутьКФайлуPDF); // чтение с диска или потока. Можно указать пароль
   PDF.Напечатать(РежимИспользованияДиалогаПечати.Использовать); // с 8.3.21

КонецПроцедуры
Добавить подпись в PDF в 1С 8.3:
&НаКлиенте
Процедура ДобавитьПодписьPDF(Команда)

   Крипто = Новый МенеджерКриптографии("", "", 80);
   Крипто.ПарольДоступаКЗакрытомуКлючу = ПарольЭЦП; // строка

   //Сертификат = ПолучитьОткрытыйСертификат();

   ПодписьPDF = Новый ОписаниеПодписиPDF;
   ПодписьPDF.Имя = "ПодписьДоговора";
   //ПодписьPDF.Сертификат = Сертификат;
   ПодписьPDF.ТипПодписи = ТипПодписиPDF.Утверждающая;
   ПодписьPDF.БлокировкаДокумента = Истина;

   ЗаписьPDF = Новый ЗаписьPDF(ПутьКФайлуPDF);

   ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
   Штамп = ОтчетОбъект.ПолучитьМакет("ПодписьЭЦП");
   ЗаписьPDF.ЗаписатьПодпись(Крипто, ПодписьPDF, Штамп);

КонецПроцедуры
Проверить подпись в PDF в 1С 8.3:
&НаКлиенте
Процедура ПроверитьПодписьPDF(Команда)

   Крипто = Новый МенеджерКриптографии("", "", 80);
   Крипто.ПарольДоступаКЗакрытомуКлючу = ПарольЭЦП; // строка

   // Получить список подписей, которыми подписан документ:
   ЧтениеPDF = Новый ЧтениеPDF(ПутьКФайлуPDF);
   Подписи = ЧтениеPDF.ПолучитьОписанияПодписей(Крипто); // массив объектов описания подписи

КонецПроцедуры
Проверить конкретную подпись в PDF в 1С 8.3:
&НаКлиенте
Процедура ПроверитьКонкретнуюПодписьPDF(Команда)

   Крипто = Новый МенеджерКриптографии("", "", 80);
   Крипто.ПарольДоступаКЗакрытомуКлючу = ПарольЭЦП; // строка

   ЧтениеPDF = Новый ЧтениеPDF(ПутьКФайлуPDF);
   Подписи = ЧтениеPDF.ПолучитьОписанияПодписей(Крипто);
   Для Каждого ТекПодпись Из Подписи Цикл
       Попытка
           ЧтениеPDF.ПроверитьПодпись(ТекПодпись.Имя, Крипто);
           // Ждать ЧтениеPDF.ПроверитьПодписьАсинх(ТекПодпись.Имя, Крипто);
       Исключение
           Сообщить("Подпись " + ТекПодпись.Имя + " в "+ПутьКФайлуPDF+" недействительна!");
       КонецПопытки;
   КонецЦикла;

КонецПроцедуры
Проверить все подписи в PDF в 1С 8.3:
&НаКлиенте
Процедура ПроверитьВсеПодписиPDF(Команда)

   Крипто = Новый МенеджерКриптографии("", "", 80);
   Крипто.ПарольДоступаКЗакрытомуКлючу = ПарольЭЦП; // строка

   ЧтениеPDF = Новый ЧтениеPDF(ПутьКФайлуPDF);
   Подписи = ЧтениеPDF.ПолучитьОписанияПодписей(Крипто);

   Попытка
       ЧтениеPDF.ПроверитьПодписи(Крипто);
       // Ждать ЧтениеPDF.ПроверитьПодписиАсинх(Крипто);
   Исключение
       Сообщить("Подписи в "+ПутьКФайлуPDF+" недействительны!");
   КонецПопытки;

КонецПроцедуры
Добавить картинку в PDF в 1С 8.3:
&НаКлиенте
Процедура ДобавитьКартинкуPDF(Команда) // или табл.док.

   КартинкаЭЦП = Новый Картинка("D:\Scan\ECP2005241249.jpg");

   ОписаниеЭЦП = Новый ОписаниеОтображаемогоОбъектаPDF;
   ОписаниеЭЦП.Имя           = "ЭЦП";
   ОписаниеЭЦП.Ширина        = 46;
   ОписаниеЭЦП.Высота        = 18;
   ОписаниеЭЦП.Лево          = 10;
   ОписаниеЭЦП.Верх          = 10;
   ОписаниеЭЦП.НомерСтраницы = 1; // добавим на первую
   ОписаниеЭЦП.Объект        = КартинкаЭЦП;

   ЗаписьPDF = Новый ЗаписьPDF(ПутьКФайлуPDF);
   ЗаписьPDF.ЗаписатьОтображаемыйОбъект(ОписаниеЭЦП); // с 8.3.16

КонецПроцедуры
Добавить вложение в PDF в 1С 8.3:
&НаКлиенте
Процедура ДобавитьВложениеPDF()

   ФайлДвоичныеДанныеPDF = Новый ДвоичныеДанные(ПутьКФайлуPDF);
   ФайлДвоичныеДанныеJPG = Новый ДвоичныеДанные(ПутьКФайлуJPG);
   ПотокФайлPDF          = ФайлДвоичныеДанныеPDF.ОткрытьПотокДляЧтения();

   PDF = Новый ДокументPDF();
   PDF.Прочитать(ПотокФайлPDF);
   PDF.Вложения.Добавить("ECP2005241249", ФайлДвоичныеДанныеJPG); // с 8.3.21. Добавить вложение в коллекцию
   // PDF.Вложения.Получить(); // с 8.3.21. Получить вложение из коллекции (по индексу)
   // PDF.Вложения.Удалить(); // с 8.3.21. Удалить вложение из коллекции (по индексу)
   // PDF.Вложения.Очистить(); // с 8.3.21. Очистить коллекцию
   // PDF.Вложения.Найти("ECP2005241249"); // с 8.3.21. Найти вложение по имени файла
   // PDF.Вложения.Количество(); // с 8.3.21. Получить параметры коллекции
   PDF.Записать(ПутьКФайлуPDF);

   Сообщить("В "+ПутьКФайлуPDF+" добавлено вложение "+ПутьКФайлуJPG);

КонецПроцедуры
Справочно (переменные):
ФайлPDF = Новый Файл("D:\Scan\Dogovor.pdf"); // заменить на рекизит - выбор на форме
ПутьКФайлуPDF = Строка(ФайлPDF.ПолноеИмя);

ФайлJPG = Новый Файл("D:\Scan\ECP2005241249.jpg"); // заменить на рекизит - выбор на форме
ПутьКФайлуJPG = Строка(ФайлJPG.ПолноеИмя);

ПарольЭЦП = 123456;

Добавить вложение к письму в формате PDF (аналог типовой процедуры) в 1С 8.3:
Процедура ДобавитьВложениеВФорматеPDFкПисьму(ТелоПисьма, Вложения,
                   СведенияОДок, ДвоичныеДанныеВложения, УникальныйИдентификатор)

   ТелоПисьма.Добавить(НСтр("ru = 'Документ присоединен к письму.'"), ТипЭлементаФорматированногоДокумента.Текст);
   ТелоПисьма.Добавить(, ТипЭлементаФорматированногоДокумента.ПереводСтроки);
   ТелоПисьма.Добавить(, ТипЭлементаФорматированногоДокумента.ПереводСтроки);

   АдресВложенияPDF = ПоместитьВоВременноеХранилище(ТабличныйДокументВPDF(ДвоичныеДанныеВложения), УникальныйИдентификатор);

   ВложениеPDF = Новый Структура;
   ВложениеPDF.Вставить("АдресВоВременномХранилище", АдресВложенияPDF);
   ВложениеPDF.Вставить("Представление", СтрШаблон("%1.pdf", СведенияОДок));

   Вложения.Добавить(ВложениеPDF);

КонецПроцедуры


Функция ТабличныйДокументВPDF(ДвоичныеДанныеВложения)

   ТабличныйДокументВложения = ТабличныйДокументВложения(ДвоичныеДанныеВложения);
   ПотокВПамяти = Новый ПотокВПамяти();
   ТабличныйДокументВложения.Записать(ПотокВПамяти, ТипФайлаТабличногоДокумента.PDF);
   Возврат ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные();

КонецФункции


Функция ТабличныйДокументВложения(ДвоичныеДанныеВложения)

   БуферДанныхВложения = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ДвоичныеДанныеВложения);
   ПотокВПамяти = Новый ПотокВПамяти(БуферДанныхВложения);

   ТаблицаВложения = Новый ТабличныйДокумент;
   ТаблицаВложения.Прочитать(ПотокВПамяти);
   Возврат ТаблицаВложения;

КонецФункции
📰 Актуальные новости с тегом #PDF:
  • В версию 8.3.26 добавлена возможность получения размера страницы PDF
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 20.05.2024
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому