Как заполнить существующий PDF-шаблон данными из 1С: подробное руководство

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

В процессе разработки часто возникает задача выгрузки данных в строго утвержденные формы (например, налоговые декларации, банковские документы или международные контракты), которые предоставляются в формате PDF. Основная сложность заключается в том, что PDF-файл — это не просто картинка, а сложная структура, и платформа 1С "из коробки" не всегда позволяет напрямую редактировать его содержимое. В этой статье мы разберем несколько эффективных стратегий решения этой задачи: от стандартных средств платформы до использования внешних инструментов.

Метод 1. Воссоздание макета в Табличном документе 1С

Это самый распространенный и "чистый" с точки зрения архитектуры способ. Вместо того чтобы пытаться "взломать" PDF, мы создаем его точную копию внутри конфигурации. Рассмотрим этот процесс подробнее.

Алгоритм реализации:

  1. Создадим новый Макет типа "Табличный документ".
  2. Перенесем структуру из PDF. Чтобы добиться идеального совпадения, установим в PDF-ридере масштаб 100%, сделаем скриншот страницы и вставим его в 1С как фоновую картинку или просто рядом для визуального контроля.
  3. Настроим сетку. Сделаем колонки и строки очень узкими (например, шириной 1 и высотой 3), чтобы иметь возможность точно позиционировать ячейки.
  4. Разместим текст, линии и рамки, используя стандартные свойства оформления: ГраницаСверху, Шрифт, ОриентацияТекста.
  5. Для полей, которые должны заполняться данными, установим свойство Заполнение в значение Параметр.

После создания макета, мы можем программно заполнить его и сохранить в PDF. Проанализируем пример кода:


ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетPDF_Шаблон");
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");

// Заполняем параметры данными из 1С
ОбластьМакета.Параметры.НомерДокумента = "№ 123";
ОбластьМакета.Параметры.ДатаДокумента = ТекущаяДата();

ТабДок.Вывести(ОбластьМакета);

// Сохраняем итоговый результат в PDF
ТабДок.Записать("C:\Temp\Result.pdf", ТипФайлаТабличногоДокумента.PDF);

Метод 2. Использование фоновой подложки (для платформы 8.3.15+)

Если шаблон слишком сложен для ручной отрисовки (много мелких деталей, градиентов или специфических шрифтов), воспользуемся функционалом фонового изображения. Начиная с версии 8.3.15, ТабличныйДокумент позволяет устанавливать картинку на задний план.

Шаги выполнения:

  1. Конвертируем страницу PDF в качественное изображение (формат PNG с высоким DPI).
  2. В макете 1С переходим в свойства табличного документа и устанавливаем это изображение в поле ФоноваяКартинка.
  3. Устанавливаем свойство ВыводитьНаПечать для картинки, если это необходимо.
  4. Теперь нам остается только "наложить" прозрачные ячейки поверх нужных мест на картинке и назначить им параметры. При печати или сохранении пользователь увидит оригинальный бланк с наложенными данными.

Метод 3. Использование Microsoft Word как посредника

Если ваша компания использует пакет MS Office, можно применить метод через COM-соединение. Word гораздо лучше справляется с позиционированием элементов, чем табличный документ 1С. Рассмотрим ситуацию, когда у нас есть .docx файл, который мы потом программно переводим в PDF.

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

  1. Подготовим шаблон в Word. Там, где должны быть данные из 1С, расставим "Закладки" (Bookmarks).
  2. В коде 1С инициализируем COM-объект и заполним эти закладки.
  3. Используем метод экспорта Word для сохранения в PDF.

Попытка
    Word = Новый COMОбъект("Word.Application");
Исключение
    Сообщить("MS Word не установлен");
    Возврат;
КонецПопытки;

Документ = Word.Documents.Open("C:\Templates\Contract.docx");
Word.Visible = Ложь;

// Поиск и замена закладок
Если Документ.Bookmarks.Exists("Number") Тогда
    Документ.Bookmarks.Item("Number").Range.Text = "001-А";
КонецЕсли;

// Сохранение в PDF (формат 17 соответствует wdExportFormatPDF)
ПутьСохранения = "C:\Temp\Contract.pdf";
Документ.ExportAsFixedFormat(ПутьСохранения, 17);

Документ.Close(0); // Закрыть без сохранения изменений в шаблоне
Word.Quit();

Метод 4. Автоматизация через утилиту PDFtk (Профессиональный подход)

Выясним причину, по которой этот метод считается наиболее надежным для работы с уже готовыми формами AcroForms (PDF с заполняемыми полями). Утилита PDFtk — это консольный инструмент, который умеет "впрыскивать" данные в PDF-поля без изменения самого макета.

Как это работает:

  1. В PDF-редакторе (например, Adobe Acrobat или бесплатные аналоги) создаем текстовые поля и даем им уникальные имена (например, ClientName, TotalSum).
  2. В 1С формируем текстовый файл данных формата FDF или XFDF (это простые XML-подобные форматы).
  3. Вызываем PDFtk через командную строку.

Пример формирования команды:


// Формируем строку запуска для командной строки
// pdftk шаблон.pdf fill_form данные.fdf output результат.pdf flatten
ПутьКPDFtk = "C:\Program Files (x86)\PDFtk\bin\pdftk.exe";
Шаблон = "C:\Forms\Claim.pdf";
ФайлДанных = "C:\Temp\Data.fdf";
Результат = "C:\Temp\Final_Claim.pdf";

Команда = СтрШаблон("%1 %2 fill_form %3 output %4 flatten", 
            ПутьКPDFtk, Шаблон, ФайлДанных, Результат);

ЗапуститьПриложение(Команда, , Истина); // Истина - ждать завершения

Параметр flatten крайне важен — он "склеивает" данные с подложкой, делая поля недоступными для дальнейшего редактирования, что превращает документ в обычный печатный PDF.

Выводы и рекомендации

Выбор метода зависит от ваших условий:

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

← На главную