Как программно создать или отредактировать PDF-файл с таблицами бесплатно

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

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

Вариант 1: Использование штатных возможностей платформы 1С

Прежде чем искать внешние компоненты, проанализируем инструменты, которые уже есть в нашем распоряжении. Начиная с версии платформы 8.3.10, 1С существенно расширила возможности работы с файлами. Наиболее простой и эффективный способ создать PDF с таблицей — это сформировать ТабличныйДокумент и сохранить его в нужном формате.

Рассмотрим по шагам, как это реализовать:

  1. Создаем новый объект ТабличныйДокумент.
  2. Заполняем его данными, используя макеты или программное формирование областей.
  3. Используем метод Записать() с указанием типа файла PDF.

Пример кода для реализации этого метода:


ТабДок = Новый ТабличныйДокумент;
// Предположим, у нас есть макет с именем "МакетТаблицы"
Макет = ПолучитьМакет("МакетТаблицы");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(ОбластьШапка);

Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьСтрока.Параметры.Наименование = Выборка.Наименование;
    ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;

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

Этот метод является полностью бесплатным, не требует установки стороннего ПО и идеально подходит для генерации новых документов. Если же вам нужно использовать HTML-верстку, вы можете воспользоваться объектом ПолеHTMLДокумента и аналогичным методом записи.

Вариант 2: Использование связки PDFSharp и MigraDoc

Если штатных средств недостаточно (например, требуется тонкая настройка слоев PDF или модификация существующего файла), следует обратить внимание на библиотеку PDFSharp. Однако, как правильно отмечено в обсуждении, PDFSharp — это низкоуровневый инструмент. Рисование таблицы с его помощью превращается в утомительный расчет координат каждой линии.

Для упрощения работы существует надстройка MigraDoc. Она позволяет оперировать понятиями «секция», «абзац» и «таблица». Выясним, как работает эта связка:

Проанализируем пример логики построения таблицы в MigraDoc (через COM или внешнюю компоненту):


// Создание документа
Document document = new Document();
Section section = document.AddSection();

// Добавление таблицы
Table table = section.AddTable();
table.Borders.Width = 0.75;

// Определение колонок
Column column = table.AddColumn(Unit.FromCentimeter(3));
column.Format.Alignment = ParagraphAlignment.Center;

// Добавление строк и ячеек
Row row = table.AddRow();
row.Shading.Color = Colors.PaleGoldenrod;
Cell cell = row.Cells[0];
cell.AddParagraph("Заголовок таблицы");

// Рендеринг в PDF
PdfDocumentRenderer renderer = new PdfDocumentRenderer(true);
renderer.Document = document;
renderer.RenderDocument();
renderer.PdfDocument.Save("Example.pdf");

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

Вариант 3: Конвертация через консольную утилиту wkhtmltopdf

Рассмотрим ситуацию, когда вам проще всего сверстать таблицу на HTML/CSS, но нужно получить качественный PDF на выходе. Утилита wkhtmltopdf использует движок WebKit (как в старых версиях Chrome/Safari) для рендеринга страницы.

Алгоритм работы в 1С будет следующим:

  1. Программно формируем строку с HTML-кодом таблицы.
  2. Записываем эту строку во временный файл с расширением .html.
  3. Вызываем внешнюю утилиту через команду ЗапуститьПриложение().

Посмотрим на пример реализации запуска:


ПутьКПрограмме = """C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe""";
ФайлИсточник = "C:\Temp\table.html";
ФайлРезультат = "C:\Temp\table.pdf";

ПараметрыЗапуска = ФайлИсточник + " " + ФайлРезультат;
ЗапуститьПриложение(ПутьКПрограмме + " " + ПараметрыЗапуска, , Истина);

Преимущество этого метода: вы можете использовать всю мощь CSS для оформления таблиц (границы, тени, сложные шрифты), что сложно реализовать в чисто программных библиотеках.

Вариант 4: Использование Apache PDFBox (Java)

Библиотека PDFBox, упомянутая в сообщениях форума, является стандартом в мире Java. Она бесплатна и крайне надежна. Однако для интеграции с 1С потребуется либо запуск Java-приложения из командной строки, либо использование специализированных «мостов» между 1С и Java.

Разберем особенности PDFBox:

Вариант 5: Библиотека ReportLab (Python)

Если ваша инфраструктура позволяет вызывать Python-скрипты, то библиотека ReportLab (Open Source версия) предложит вам один из лучших движков для работы с таблицами. В ней реализован объект Table, который умеет делать автоматический перенос строк в ячейках, менять цвет строк через одну (зебра) и настраивать отступы.

Данные из 1С в этом случае удобно передавать через формат JSON, который Python прочитает и превратит в PDF-отчет.

Анализ проблем с Debenu PDF Library

Выясним причину, по которой автор вопроса столкнулся с ошибкой. Библиотека Debenu PDF Library имеет две версии: Lite и Commercial. Версия Lite крайне ограничена. В ней отсутствуют функции:

Поэтому для серьезных задач автоматизации бесплатная версия Debenu, к сожалению, не подходит.

Итоги и рекомендации

Проанализировав все доступные варианты, мы можем сделать следующие выводы:

1. Если задача сводится к созданию нового PDF из данных 1С, лучшим решением будет использование штатного ТабличногоДокумента или HTML с методом Записать(). Это максимально быстро и надежно.

2. Если нужно модифицировать готовый PDF (добавить таблицу в середину файла), обратите внимание на PDFSharp + MigraDoc. Это потребует навыков работы с внешними компонентами или написания небольшой обертки на C#.

3. Для создания документов с очень сложным дизайном, где важна попиксельная точность и современные стили, используйте wkhtmltopdf.

4. Если вы работаете в кроссплатформенной среде (например, на Linux-сервере 1С), связка с Python (ReportLab) или Java (PDFBox) может оказаться более гибкой.

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

← На главную