Полный клиентский модуль ожидает запись штампа, а затем закрытие писателя. Проверка читаемости и ручная проверка вида разделены.
Где и как запускать
Модуль пустой управляемой формы учебной внешней обработки; тонкий или толстый клиент Windows. Вставьте весь модуль. Это не серверный код.
Подготовка
Создайте учебную внешнюю обработку с пустой управляемой основной формой. Создайте команду УчебныйПример и кнопку этой команды.
В свойстве команды Действие выберите процедуру УчебныйПример. Вставьте полный приведённый модуль формы.
Откройте EPF в тонком или толстом клиенте Windows и нажмите кнопку. Не переносите Ждать и Асинх в серверный общий модуль.
Пример работает только со своими данными в памяти; записи в базу, файлы и сеть нет.
Документ PDF строится из собственной ячейки Книга: 3 шт. Внешний PDF, установленный PDF-редактор, криптографический сертификат и реальные персональные данные не нужны.
Файловый путь нигде не используется. Для просмотра в PDF-программе сохраните только полученные собственные двоичные данные в отдельно выбранный новый учебный файл.
&НаКлиенте
Асинх Процедура УчебныйПример(Команда)
Чтение = Неопределено;
Запись = Неопределено;
ПотокЧтения = Неопределено;
ПотокPDF = Новый ПотокВПамяти;
Документ = Новый ТабличныйДокумент;
Документ.Область("A1").Текст = "Книга: 3 шт.";
Документ.Область("A1").ЦветТекста = Новый Цвет(30, 90, 180);
Попытка
Ждать Документ.ЗаписатьАсинх(ПотокPDF, ТипФайлаТабличногоДокумента.PDF);
Штамп = Новый ТабличныйДокумент;
Штамп.Область("A1").Текст = "УЧЕБНЫЙ ОБРАЗЕЦ";
ОписаниеШтампа = Новый ОписаниеОтображаемогоОбъектаPDF;
ОписаниеШтампа.Объект = Штамп;
ОписаниеШтампа.Имя = "УчебныйШтамп";
ОписаниеШтампа.НомерСтраницы = 1;
ОписаниеШтампа.Лево = 20;
ОписаниеШтампа.Верх = 30;
ОписаниеШтампа.Ширина = 60;
ОписаниеШтампа.Высота = 12;
Сообщить(ОписаниеШтампа.Объект = Штамп);
Сообщить(ОписаниеШтампа.Имя = "УчебныйШтамп");
Сообщить(ОписаниеШтампа.НомерСтраницы = 1);
Сообщить(ОписаниеШтампа.Лево = 20 И ОписаниеШтампа.Верх = 30);
Сообщить(ОписаниеШтампа.Ширина = 60 И ОписаниеШтампа.Высота = 12);
Запись = Новый ЗаписьPDF;
ПотокPDF.Перейти(0, ПозицияВПотоке.Начало);
Ждать Запись.ОткрытьАсинх(ПотокPDF);
Ждать Запись.ЗаписатьОтображаемыйОбъектАсинх(ОписаниеШтампа);
Ждать Запись.ЗакрытьАсинх();
Запись = Неопределено;
БайтыPDF = ПотокPDF.ЗакрытьИПолучитьДвоичныеДанные();
ПотокPDF = Неопределено;
ПотокЧтения = БайтыPDF.ОткрытьПотокДляЧтения();
Чтение = Новый ЧтениеPDF;
Ждать Чтение.ОткрытьАсинх(ПотокЧтения);
Прочитанные = Ждать Чтение.ПолучитьВложенияАсинх();
Сообщить(Прочитанные.Количество() = 0);
Сообщить(БайтыPDF.Размер() > 0);
Исключение
Если Чтение <> Неопределено Тогда
Ждать Чтение.ЗакрытьАсинх();
КонецЕсли;
Если Запись <> Неопределено Тогда
Ждать Запись.ЗакрытьАсинх();
КонецЕсли;
Если ПотокЧтения <> Неопределено Тогда
ПотокЧтения.Закрыть();
КонецЕсли;
Если ПотокPDF <> Неопределено Тогда
ПотокPDF.Закрыть();
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Если Чтение <> Неопределено Тогда
Ждать Чтение.ЗакрытьАсинх();
КонецЕсли;
Если Запись <> Неопределено Тогда
Ждать Запись.ЗакрытьАсинх();
КонецЕсли;
Если ПотокЧтения <> Неопределено Тогда
ПотокЧтения.Закрыть();
КонецЕсли;
Если ПотокPDF <> Неопределено Тогда
ПотокPDF.Закрыть();
КонецЕсли;
КонецПроцедурыРазбор по шагам
Собственный PDF экспортируется через Ждать; чужой документ не используется.
Штамп — ТабличныйДокумент с текстом УЧЕБНЫЙ ОБРАЗЕЦ. Описание содержит страницу 1, координаты 20/30 мм и размеры 60/12 мм.
Ждать ЗаписатьОтображаемыйОбъектАсинх должен завершиться до Ждать ЗакрытьАсинх.
Только затем получаем байты и открываем читателя. Автоматическая проверка структуры не заменяет просмотр штампа.
Как проверить результат
Семь сравнений Истина: пять свойств описания и две проверки результата.
Сохраните собственные БайтыPDF вручную в новый учебный файл и проверьте надпись на первой странице.
Ожидаемый результат
Штамп записан последовательной клиентской асинхронной операцией.
На что обратить внимание
Штамп не является электронной подписью.
Нельзя закрыть поток или получить окончательные байты до завершения записи.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.