Как программно сохранить табличный документ в PDF с настройками печати

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки в среде 1С:Предприятие часто возникает задача не просто вывести отчет или печатную форму на экран, но и сохранить её в файл формата PDF для последующей отправки по электронной почте или архивирования. При этом критически важно, чтобы итоговый файл выглядел презентабельно: имел правильную ориентацию, умещался по ширине страницы и содержал только необходимые данные. Рассмотрим подробно, как реализовать этот функционал программно, используя встроенные возможности платформы 1С.

Основы работы с объектом ТабличныйДокумент

Для начала проанализируем базовый механизм. Основным объектом, с которым мы будем работать, является ТабличныйДокумент. Именно в него мы выводим данные из макета, и именно у него есть метод Записать(), позволяющий выполнить экспорт в различные форматы. Однако распространенная ошибка начинающих разработчиков заключается в том, что они вызывают метод записи до того, как настроят параметры страницы. Это приводит к тому, что PDF-файл получается «разрезанным» или с неправильным масштабом.

Разберем последовательность действий, которой необходимо придерживаться:

  1. Формирование содержимого табличного документа, включая генерацию QR и штрихкодов без библиотек.
  2. Настройка параметров страницы (ориентация, поля, масштаб).
  3. Проверка области печати.
  4. Вызов метода записи в файл с указанием типа ТипФайлаТабличногоДокумента.PDF.

Программная настройка параметров страницы

Прежде чем сохранять документ, проанализируем свойства, которые напрямую влияют на визуальное представление PDF. Выясним причину, по которой документ может выглядеть некорректно: чаще всего это игнорирование свойств ОриентацияСтраницы, АвтоМасштаб или режима печати книжкой.

Рассмотрим пример кода, который задает альбомную ориентацию и заставляет документ «вписаться» в одну страницу по ширине:


// Создаем новый табличный документ или получаем готовый
ТабДок = Новый ТабличныйДокумент;

// Настраиваем ориентацию страницы
// Возможные значения: ОриентацияСтраницы.Портрет или ОриентацияСтраницы.Ландшафт
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;

// Настраиваем автоматический масштаб, чтобы текст не обрезался
ТабДок.АвтоМасштаб = Истина;

// Устанавливаем количество страниц в ширину, если АвтоМасштаб не подходит
ТабДок.КоличествоСтраницВШирину = 1;

// Убираем отображение сетки и заголовков, чтобы PDF выглядел чисто
ТабДок.ОтображатьСетку = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;

Важно понимать: Свойство АвтоМасштаб является ключевым, когда мы не знаем заранее, сколько колонок будет в итоговом отчете. Если его не установить, 1С будет использовать стандартный масштаб 100%, что часто приводит к переносу последних колонок на второй лист.

Установка полей и области печати

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


ТабДок.ПолеСверху = 10;
ТабДок.ПолеСнизу = 10;
ТабДок.ПолеСлева = 20; // Оставляем место под переплет
ТабДок.ПолеСправа = 5;

Если в вашем табличном документе есть служебные области, которые не должны попасть в PDF, мы можем явно ограничить область печати. Разберем, как это сделать с помощью объекта ОбластьЯчеекТабличногоДокумента:


// Определяем область, которую нужно вывести на печать
// Например, с первой строки по сотую и с первой колонки по десятую
ОбластьПечати = ТабДок.Область(1, 1, 100, 10);
ТабДок.ОбластьПечати = ОбластьПечати;

Сохранение в PDF и обработка исключений

Теперь, когда все настройки выполнены, мы можем перейти к финальному этапу — записи файла на диск. Для этого используется метод Записать(). Выясним, какие параметры он принимает. Первый параметр — это полный путь к файлу (строка), второй — тип файла (системное перечисление).

Посмотрим на пример завершающего этапа кода:


ПутьКФайлу = "C:\Reports\DailyReport.pdf";

Попытка
    ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);
    Сообщить("Файл успешно сохранен по пути: " + ПутьКФайлу);
Исключение
    // Обрабатываем ошибки (например, если файл открыт в другой программе или нет прав доступа)
    ТекстОшибки = ИнформацияОбОшибке().Описание;
    ЗаписьЖурналаРегистрации("СохранениеPDF", УровеньЖурналаРегистрации.Ошибка, , , ТекстОшибки);
    ВызватьИсключение "Не удалось сохранить файл PDF. Причина: " + ТекстОшибки;
КонецПопытки;

Особенности работы на стороне сервера

Проанализируем важный нюанс: где выполняется этот код? Если код выполняется на стороне сервера (например, в регламентном задании), то у объекта ТабличныйДокумент могут возникнуть сложности с определением шрифтов или параметров принтера. В 1С версии 8.3 сохранение в PDF реализовано встроенными средствами платформы, которые не требуют наличия установленного виртуального принтера, однако на сервере Linux необходимо убедиться, что установлены шрифты Microsoft (ttf-mscorefonts), иначе вместо текста в PDF будут «квадраты».

Рассмотрим также вопрос безопасности. При формировании пути к файлу на сервере рекомендуется использовать временные файлы, чтобы не зависеть от жестко прописанных путей к дискам, а для трансфера данных полезно реализовать копирование файлов между Клиентом и Сервером:


// Получаем имя временного файла
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.PDF);

// Далее файл можно поместить во временное хранилище или отправить почтой
ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ИмяВременногоФайла);
АдресФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанныеФайла);

Дополнительные возможности: внедрение шрифтов и сжатие

Хотя стандартный метод Записать() не предоставляет гибких настроек качества сжатия изображений внутри PDF, платформа 1С старается соблюдать баланс между качеством и размером файла. Проанализируем способы уменьшения размера итогового документа:

  1. Минимизация графики: Старайтесь не использовать тяжелые логотипы в формате BMP. Используйте сжатые форматы (PNG, JPG) прямо в макете.
  2. Шрифты: Используйте стандартные шрифты (Arial, Times New Roman, Courier New). Использование редких декоративных шрифтов может привести к значительному увеличению размера файла, так как 1С внедряет начертания в структуру PDF.
  3. Количество страниц: Контролируйте свойство КоличествоСтраницВШирину. Чрезмерное сжатие широкой таблицы на один лист сделает текст нечитаемым в PDF, хотя технически файл будет корректен.

Итоги

Мы подробно разобрали процесс программного формирования PDF-документа. Подводя итог, отметим, что залогом успешного формирования файла является предварительная настройка свойств объекта ТабличныйДокумент. Помните, что параметры страницы (поля, ориентация, масштаб) должны устанавливаться до вызова метода сохранения. Использование блоков Попытка...Исключение позволит вашему приложению работать стабильно даже при возникновении проблем с правами доступа к файловой системе.

← На главную