Поставить штамп «ОБРАЗЕЦ — НЕ ДОКУМЕНТ» на свою страницу

Учебные задачи

Создаём настоящее описание отображаемого объекта с собственным табличным штампом и добавляем его на первую страницу собственной PDF-копии.

Где и как запускать

Полный серверный общий модуль УчебныйPDF собственной учебной конфигурации; только собственные PDF-байты в памяти.

Подготовка

  1. Отдельная собственная учебная база 8.5.1.1343: серверный общий модуль УчебныйPDF. Вставьте полный модуль одного урока и вызовите ВыполнитьПример() своей серверной командой.

  2. Имя конфигурации должно быть УчебнаяКонфигурацияСинтаксиса. Все данные создаются кодом: строка Книга / 3 / 250 / 750 и собственные текстовые вложения.

  3. Исходный PDF получается настоящим экспортом собственного ТабличныйДокумент в ПотокВПамяти. Никакого файла с неизвестным происхождением или рабочего печатного макета не требуется.

  4. Чтение и повторная запись выполняются в памяти. Примеры не печатают, не обращаются к интернету и не меняют документы базы.

  5. Проверки размеров, страниц и вложений не доказывают вид штампа или оттенки серого. Для визуального контроля используйте отдельный урок просмотра собственного PDF; этот серверный модуль окна не открывает.

Функция СоздатьСобственныеБайтыPDF()
    Таблица = Новый ТабличныйДокумент;
    Таблица.КодЯзыка = "ru";
    Таблица.Область(1, 1).Текст = "СОБСТВЕННЫЙ УЧЕБНЫЙ ОБРАЗЕЦ";
    Таблица.Область(2, 1).Текст = "Книга";
    Таблица.Область(2, 2).Текст = "3";
    Таблица.Область(2, 3).Текст = "250";
    Таблица.Область(2, 4).Текст = "750";
    Таблица.Область(1, 1, 2, 4).ЦветФона = Новый Цвет(255, 255, 210);
    Таблица.Область(, 1, , 1).ШиринаКолонки = 45;
    Поток = Новый ПотокВПамяти;
    Попытка
        Таблица.Записать(Поток, ТипФайлаТабличногоДокумента.PDF);
        Данные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
    Исключение
        Поток.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Возврат Данные;
КонецФункции

Функция ПрочитатьСобственныйДокумент(Данные)
    Поток = Данные.ОткрытьПотокДляЧтения();
    Попытка
        Документ = Новый ДокументPDF;
        Документ.Прочитать(Поток);
        Поток.Закрыть();
    Исключение
        Поток.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Возврат Документ;
КонецФункции

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

Функция СоздатьСобственныйШтамп()
    ТаблицаШтампа = Новый ТабличныйДокумент;
    ТаблицаШтампа.КодЯзыка = "ru";
    ТаблицаШтампа.Область(1, 1).Текст = "ОБРАЗЕЦ — НЕ ДОКУМЕНТ";
    ТаблицаШтампа.Область(1, 1).ЦветФона = Новый Цвет(210, 240, 255);
    Описание = Новый ОписаниеОтображаемогоОбъектаPDF;
    Описание.Имя = "guide-owned-stamp";
    Описание.Объект = ТаблицаШтампа;
    Описание.НомерСтраницы = 1;
    Описание.Лево = 10;
    Описание.Верх = 45;
    Описание.Ширина = 60;
    Описание.Высота = 10;
    Возврат Описание;
КонецФункции

Процедура ВыполнитьПример() Экспорт
    Документ = ПрочитатьСобственныйДокумент(СоздатьСобственныеБайтыPDF());
    Если Документ.КоличествоСтраниц() = 0 Тогда
        ВызватьИсключение "Нет страницы для собственного штампа";
    КонецЕсли;
    Описание = СоздатьСобственныйШтамп();
    Первая = Документ.Страницы.Получить(0);
    Если Первая.Ширина < 80 Или Первая.Высота < 65 Тогда
        ВызватьИсключение "Собственная страница слишком мала для учебных координат";
    КонецЕсли;
    Сообщить(Описание.Имя = "guide-owned-stamp");
    Сообщить(ТипЗнч(Описание.Объект) = Тип("ТабличныйДокумент"));
    Сообщить(Описание.НомерСтраницы = 1);
    Сообщить(Описание.Лево = 10 И Описание.Верх = 45);
    Сообщить(Описание.Ширина = 60 И Описание.Высота = 10);
    Документ.ДобавитьОтображаемыйОбъект(Описание, Истина);
    Байты = ЗаписатьСобственныйДокумент(Документ, ТипФайлаДокументаPDF.PDF);
    Копия = ПрочитатьСобственныйДокумент(Байты);
    Сообщить(Байты.Размер() > 0);
    Сообщить(Копия.КоличествоСтраниц() = Документ.КоличествоСтраниц());
    Сообщить("PDF со штампом записан в переменную Байты; визуальное положение отдельно проверьте в уроке просмотра");
КонецПроцедуры

Разбор по шагам

  1. Создать собственный PDF и проверить первую страницу. Настоящие размеры должны вместить учебные координаты.

  2. Заполнить все семь свойств описания: имя, объект, номер страницы и прямоугольник в миллиметрах.

  3. Передать описание ДобавитьОтображаемыйОбъект с явным Истина для учёта ориентации. Штамп — табличный документ, а не строка пути.

  4. Записать новый PDF и проверить повторное чтение и число страниц. Структурную проверку не объявлять доказательством положения штампа.

Как проверить результат

  1. Семь булевых проверок дают Истина. Описание указывает номер 1, тогда как Получить использует индекс 0.

  2. Для визуального контроля нужна собственная PDF-копия со штампом на первой странице: синий блок в прямоугольнике лево 10, верх 45, ширина 60, высота 10 мм.

Ожидаемый результат

Настоящий штамп создан и передан платформе; код учебного пособия сам в 1С не запускался, внешний вид требует ручного просмотра.

На что обратить внимание

  1. Описание не является электронной подписью. Текст «ОБРАЗЕЦ» не подтверждает авторство или подлинность документа.

  2. НомерСтраницы начинается с 1. Несуществующий номер вызывает исключение; строка "1" не нужна вместо числа.

  3. Координаты считаются от левого верхнего угла. При совместимости выше 8.3.25 изменялось поведение учёта ориентации, поэтому аргумент задаётся явно.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.