Переключить масштаб PDF и повернуть его на 90 градусов

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

Кнопка меняет собственный просмотр между 100% и 125%, а угол между 0 и 90. Данные PDF не переписываются, новый файл не сохраняется.

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

Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.

Подготовка

  1. В отдельной учебной базе 8.5.1.1343 создайте внешнюю обработку УчебныеПоляДокументов85 с пустой управляемой основной формой. Запускайте в тонком клиенте Windows; веб-клиент в этот урок не входит.

  2. Не создавайте вручную УчебныйДокумент, ПолеДокумента или учебную команду. Модуль программно добавляет их при открытии формы.

  3. В свойствах формы → События назначьте ПриСозданииНаСервере. Вставьте весь код одного урока на уровне модуля, сохраните свою EPF и откройте её в учебной базе.

  4. Поле связано с реквизитом УчебныйДокумент типа ДокументPDF. Объект документа содержит данные, элемент ПолеДокумента отвечает за отображение и пользовательские действия.

  5. Документ создаётся заново из собственных констант. Книга: 3 штуки по 250, сумма 750. Реальные документы, справочники, файлы, сертификаты и сетевые адреса не используются.

  6. Каждый урок запускайте в отдельной копии формы. Изменения текста и оформления живут в памяти открытой учебной формы; код не сохраняет документ в файл, не печатает и не пишет в базу.

  7. Размеры и ограничения элемента задаются на сервере создания формы. Кнопка выполняет клиентские проверки или явно описанное учебное изменение.

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    НовыеРеквизиты = Новый Массив;
    НовыеРеквизиты.Добавить(Новый РеквизитФормы("УчебныйДокумент", Новый ОписаниеТипов("ДокументPDF")));
    ЭтаФорма.ИзменитьРеквизиты(НовыеРеквизиты);
    ЭтаФорма.УчебныйДокумент = ПрочитатьСобственныйДокумент(СоздатьСобственныеБайтыPDF());
    Поле = Элементы.Добавить("ПолеДокумента", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеPDFДокумента;
    Поле.ПутьКДанным = "УчебныйДокумент";
    Поле.Масштаб = 100;
    Поле.Ориентация = 0;
    Поле.НомерТекущейСтраницы = 1;
    Поле.Вывод = ИспользованиеВывода.Запретить;

    КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
    КомандаДействия.Действие = "УчебноеДействие";
    КомандаДействия.Заголовок = "Изменить учебный просмотр";
    КомандаДействия.Подсказка = "Действие только над данными учебной формы";
    КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
    Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
    Кнопка.ИмяКоманды = КомандаДействия.Имя;
    Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры

&НаКлиенте
Процедура УчебноеДействие(Команда)
    Поле = Элементы.ПолеДокумента;
    Если Поле.Масштаб = 100 Тогда
        Поле.Масштаб = 125;
    Иначе
        Поле.Масштаб = 100;
    КонецЕсли;
    Если Поле.Ориентация = 0 Тогда
        Поле.Ориентация = 90;
    Иначе
        Поле.Ориентация = 0;
    КонецЕсли;
    Сообщить(Поле.Масштаб = 100 ИЛИ Поле.Масштаб = 125);
    Сообщить(Поле.Ориентация = 0 ИЛИ Поле.Ориентация = 90);
    Сообщить(Поле.НомерТекущейСтраницы = 1);
    Сообщить("Масштаб PDF: " + Строка(Поле.Масштаб));
    Сообщить("Угол 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;
        Документ.Прочитать(Поток);
        Поток.Закрыть();
    Исключение
        Поток.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Возврат Документ;
КонецФункции

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

  1. Начальные значения заданы на сервере: масштаб 100, угол 0 и первая страница собственного PDF.

  2. Проверяем текущий масштаб и назначаем одну из двух положительных величин. Значение 125 — не коэффициент 1.25 в этом свойстве.

  3. Ориентация принимает градусы, кратные 90. Используем только 0 и 90; значение 45 вызвало бы исключение по справке.

  4. Положительный угол означает поворот против часовой стрелки. Это направление не угадывается по названию клиентской кнопки.

  5. Кнопка меняет параметры поля, не вызывает Записать у ДокументPDF. Повторное нажатие возвращает исходный вид.

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

  1. Каждое нажатие ожидаемо выдаёт три Истина. Первый цикл: 125 и 90; второй: 100 и 0.

  2. Осмотрите поворот и увеличение на форме. Содержание ячеек и количество страниц должны сохраниться.

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

Параметры просмотра отделены от содержимого и записи документа.

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

  1. Произвольный угол не допускается; не подставляйте градусы из пользовательского ввода без проверки кратности 90.

  2. Масштаб формы и дополнительный масштаб PDF — разные величины.

  3. Сравнения свойств не подтверждают корректность фактического отображения в конкретном клиенте.

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

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

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

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

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