Разбираем настоящий жизненный цикл специализированного читателя PDF: собственные байты, поток, открытие, получение вложений, явное закрытие.
Где и как запускать
Полный серверный общий модуль УчебныйPDF собственной учебной конфигурации; только собственные PDF-байты в памяти.
Подготовка
Отдельная собственная учебная база 8.5.1.1343: серверный общий модуль УчебныйPDF. Вставьте полный модуль одного урока и вызовите ВыполнитьПример() своей серверной командой.
Имя конфигурации должно быть УчебнаяКонфигурацияСинтаксиса. Все данные создаются кодом: строка Книга / 3 / 250 / 750 и собственные текстовые вложения.
Исходный 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"));
Сообщить(Вложения.Количество() = 0);
Чтение.Закрыть();
Поток.Закрыть();
Исключение
Если Чтение <> Неопределено Тогда
Чтение.Закрыть();
КонецЕсли;
Поток.Закрыть();
ВызватьИсключение;
КонецПопытки;
КонецПроцедурыРазбор по шагам
Создать собственный PDF экспортом таблицы и открыть его двоичные данные отдельным потоком чтения.
Создать неинициализированный читатель, затем отдельно вызвать Открыть(Поток).
Получить настоящую КоллекцияВложенийPDF. Для собственного исходника коллекция пуста, но это не означает отсутствие страниц.
Явно закрыть читатель и свой поток при успехе и в обработке ошибки. Не использовать уже закрытый читатель без нового открытия.
Как проверить результат
Обе булевые проверки дают Истина: возвращается КоллекцияВложенийPDF, количество равно 0.
Специализированный читатель открыт на собственных PDF-байтах; ни один чужой путь не передан.
Ожидаемый результат
Конструктор и отдельное открытие объяснены на настоящем собственном PDF, а не на неопределённом входном объекте.
На что обратить внимание
ЧтениеPDF не является ДокументPDF и не предоставляет его свойство Страницы.
Не придумывайте пароль вторым аргументом Открыть(Поток): у этой потоковой перегрузки он отсутствует.
Отсутствие вложений не подтверждает отсутствие электронной подписи; проверки подписи — отдельные криптографические операции.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.