ДокументPDF.КоличествоСтраниц

Методы · PageCount

Возвращает количество страниц в PDF-документе.

Синтаксис

КоличествоСтраниц()
Полное описание, параметры и ограничения

ДокументPDF.КоличествоСтраниц (PDFDocument.PageCount)

ДокументPDF (PDFDocument)

КоличествоСтраниц (PageCount)

Доступен, начиная с версии 8.3.21.

Синтаксис:
КоличествоСтраниц()
Возвращаемое значение:
Тип: Число.

Описание:

Возвращает количество страниц в PDF-документе.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент.

Использование в версии:

Доступен, начиная с версии 8.3.21.

Методическая информация

Практические примеры

Асинхронно прочитать, поставить штамп и записать собственный PDF

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

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

Полный модуль собственной управляемой формы внешней обработки, толстый клиент Windows 8.5.1.1343.

Подготовка

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

  2. Вставьте полный модуль одного урока на уровне модуля формы, не внутрь существующего обработчика. Серверная функция создаёт собственную таблицу Книга / 3 / 250 / 750 и возвращает настоящие PDF-байты.

  3. Используйте толстый клиент Windows платформы 8.5.1.1343. Серверу необходима возможность экспортировать табличный документ в PDF. Веб-клиент и его расширения этим уроком не проверяются.

  4. Окна имеют префикс guide-owned; закрывайте вручную только эти окна. Показать передаётся пустое имя файла, поэтому рабочий файл для автосохранения не назначается.

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

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

  7. При подготовке пособия эти окна и печать в 1С не запускались: проверки структуры не являются доказательством внешнего вида или физического вывода.

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

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

  1. Создать свой PDF и открыть входной поток. Дождаться ПрочитатьАсинх, только затем закрыть поток.

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

  3. Записать в новый поток с пустым паролем и форматом PDF. Дождаться записи до получения и закрытия байтов.

  4. Прочитать новые байты отдельно, сверить страницы и открыть повторно прочитанную копию. На исключении освободить только свои потоки и снять флаг занятости.

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

  1. Две структурные проверки дают Истина: новые байты непусты и число страниц сохраняется.

  2. В окне с собственным заголовком после асинхронной записи виден учебный штамп. Эта проверка выполняется пользователем в 1С, не тестами HTML.

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

Полный последовательный асинхронный PDF-цикл с реальным чтением результата и управлением временем жизни потоков.

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

  1. Нельзя закрывать поток сразу после получения Обещание без Ждать: операция ещё может использовать данные.

  2. ПрочитатьАсинх и ЗаписатьАсинх не возвращают готовый новый ДокументPDF. Пользуемся объектом после завершения ожидания.

  3. Здесь только собственные байты в памяти; не подставляйте путь рабочего документа для перезаписи.

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

Сравнить цветной исходник и серую копию в двух своих окнах

Из одних собственных байтов создаём два разных PDF-объекта. Только второй асинхронно преобразуется в серый и открывается после Ждать.

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

Полный модуль собственной управляемой формы внешней обработки, толстый клиент Windows 8.5.1.1343.

Подготовка

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

  2. Вставьте полный модуль одного урока на уровне модуля формы, не внутрь существующего обработчика. Серверная функция создаёт собственную таблицу Книга / 3 / 250 / 750 и возвращает настоящие PDF-байты.

  3. Используйте толстый клиент Windows платформы 8.5.1.1343. Серверу необходима возможность экспортировать табличный документ в PDF. Веб-клиент и его расширения этим уроком не проверяются.

  4. Окна имеют префикс guide-owned; закрывайте вручную только эти окна. Показать передаётся пустое имя файла, поэтому рабочий файл для автосохранения не назначается.

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

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

  7. При подготовке пособия эти окна и печать в 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;
        Документ.Прочитать(Поток);
        Поток.Закрыть();
    Исключение
        Поток.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Возврат Документ;
КонецФункции

&НаКлиенте
Асинх Процедура Выполнить(Команда)
    Если Занято = Истина Тогда
        ВызватьИсключение "Дождитесь завершения собственной операции";
    КонецЕсли;
    Занято = Истина;
    Попытка
        Данные = СоздатьСобственныеБайтыPDF();
        ИсходныйPDF = ПрочитатьСобственныйДокумент(Данные);
        СобственныйPDF = ПрочитатьСобственныйДокумент(Данные);
        Ждать СобственныйPDF.ПреобразоватьВОттенкиСерогоАсинх();
        Сообщить(ИсходныйPDF.КоличествоСтраниц() = СобственныйPDF.КоличествоСтраниц());
        ИсходныйPDF.Показать("guide-owned: исходник с жёлтой подложкой", "");
        СобственныйPDF.Показать("guide-owned: собственная серая копия", "");
        Занято = Ложь;
    Исключение
        Занято = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

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

  1. Заблокировать повторный запуск собственной команды до окончания операции.

  2. Прочитать исходные байты дважды: объекты независимы. Не присваивать СобственныйPDF = ИсходныйPDF, иначе это будет одна и та же версия.

  3. Дождаться ПреобразоватьВОттенкиСерогоАсинх, затем сверить число страниц.

  4. Открыть два собственных окна и сравнить жёлтую и серую подложку. Снять флаг занятости и при успехе, и после исключения.

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

  1. Проверка количества страниц даёт Истина. Два окна имеют разные собственные заголовки.

  2. В первом окне фон жёлтый, во втором серый; строка книги одинакова. Подтверждение цветов требует ручного запуска в 1С.

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

Законченное упражнение асинхронного преобразования с сохранённой исходной версией и честной визуальной проверкой.

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

  1. Обещание преобразования не содержит новый PDF: метод меняет собственный объект, его надо дождаться.

  2. До завершения не закрывайте форму. Исходные PDF-байты и два объекта могут занимать память: для огромных документов нужен отдельный проект обработки.

  3. Количество страниц не доказывает цвет; внешний вид проверяется глазами в собственных окнах.

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

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

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

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

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