Открыть PDF без вложений через отдельный Открыть

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

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

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

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

Подготовка

  1. Используйте отдельную учебную базу. Фрагмент без директив вставьте в тело серверной процедуры ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи.

  2. Все исходные байты создаются самим примером в памяти. Файлы, сеть, справочники и документы не нужны.

  3. Запускайте задачи отдельно. После закрытия ЧтениеДанных/ЗаписьДанных не используйте этот экземпляр повторно.

  4. Документ PDF строится из собственной ячейки Книга: 3 шт. Внешний PDF, установленный PDF-редактор, криптографический сертификат и реальные персональные данные не нужны.

  5. Файловый путь нигде не используется. Для просмотра в PDF-программе сохраните только полученные собственные двоичные данные в отдельно выбранный новый учебный файл.

Чтение = Неопределено;
Запись = Неопределено;
ПотокЧтения = Неопределено;
ПотокPDF = Новый ПотокВПамяти;
Документ = Новый ТабличныйДокумент;
Документ.Область("A1").Текст = "Книга: 3 шт.";
Документ.Область("A1").ЦветТекста = Новый Цвет(30, 90, 180);
Попытка
    Документ.Записать(ПотокPDF, ТипФайлаТабличногоДокумента.PDF);
    БайтыPDF = ПотокPDF.ЗакрытьИПолучитьДвоичныеДанные();
    ПотокPDF = Неопределено;
    ПотокЧтения = БайтыPDF.ОткрытьПотокДляЧтения();
    Чтение = Новый ЧтениеPDF;
    Чтение.Открыть(ПотокЧтения);
    ПустойПеречень = Чтение.ПолучитьВложения();
    Сообщить(ПустойПеречень.Количество() = 0);
    Сообщить(ПустойПеречень.Найти("товар.json") = Неопределено);
    Сообщить(БайтыPDF.Размер() > 0);
Исключение
    Если Чтение <> Неопределено Тогда
        Чтение.Закрыть();
    КонецЕсли;
    Если Запись <> Неопределено Тогда
        Запись.Закрыть();
    КонецЕсли;
    Если ПотокЧтения <> Неопределено Тогда
        ПотокЧтения.Закрыть();
    КонецЕсли;
    Если ПотокPDF <> Неопределено Тогда
        ПотокPDF.Закрыть();
    КонецЕсли;
    ВызватьИсключение;
КонецПопытки;
Если Чтение <> Неопределено Тогда
    Чтение.Закрыть();
КонецЕсли;
Если Запись <> Неопределено Тогда
    Запись.Закрыть();
КонецЕсли;
Если ПотокЧтения <> Неопределено Тогда
    ПотокЧтения.Закрыть();
КонецЕсли;
Если ПотокPDF <> Неопределено Тогда
    ПотокPDF.Закрыть();
КонецЕсли;

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

  1. Собственный табличный документ экспортирован без третьего аргумента вложений.

  2. Создаём неинициализированный ЧтениеPDF, затем Открыть получает поток; до этого ПолучитьВложения не вызывается.

  3. Пустой список корректно открытого документа имеет количество 0, а поиск возвращает Неопределено.

  4. Объект чтения и поток закрываются и при успехе, и при ошибке.

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

  1. Три сравнения Истина; PDF не пустой, но вложений нет.

  2. Не нужно считать отсутствие вложений повреждением PDF.

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

Разделены создание объекта, открытие документа и чтение пустой коллекции.

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

  1. Конструктор без аргументов сам по себе не создаёт пустой PDF.

  2. Именем несуществующего вложения нельзя заменить проверку успешного открытия документа.

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

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

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

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

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