Генерация PDF отчётов на C# (.NET): iTextSharp, QuestPDF, PDFsharp

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Генерация PDF отчётов на C# (.NET): обзор лучших библиотек

Создание PDF-отчётов — одна из самых частых задач в корпоративных приложениях на C# (.NET). Будь то выгрузка данных для клиента, формирование счёта или сложный аналитический дашборд — вам потребуется надёжный инструмент. В этой статье мы разберём три основные библиотеки: iTextSharp (и его наследник iText 7), QuestPDF и PDFsharp. Вы узнаете, какую выбрать под конкретную задачу, и увидите рабочие примеры кода.

1. iTextSharp / iText 7 — классика и мощь

iTextSharp — это порт популярной Java-библиотеки iText для .NET. Версия iText 7 (NuGet-пакет itext7) полностью переписана и поддерживает современный API. Библиотека позволяет создавать PDF с нуля, редактировать существующие, добавлять водяные знаки, формы, закладки и метаданные.

Основные возможности:

  • Полный контроль над структурой документа (абзацы, таблицы, изображения, списки).
  • Поддержка шрифтов, в том числе кириллических (TrueType).
  • Работа с формами (AcroForms) и цифровыми подписями.
  • Лицензия: AGPL (коммерческое использование требует покупки лицензии).

Пример: создание простого отчёта с таблицей

using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;

public void CreateReport(string filePath)
{
    using (var writer = new PdfWriter(filePath))
    using (var pdf = new PdfDocument(writer))
    using (var document = new Document(pdf))
    {
        document.Add(new Paragraph("Отчёт о продажах")
            .SetFontSize(20).SetBold());

        Table table = new Table(3);
        table.AddCell("Товар");
        table.AddCell("Количество");
        table.AddCell("Цена");

        table.AddCell("Ноутбук");
        table.AddCell("10");
        table.AddCell("75000");

        table.AddCell("Мышь");
        table.AddCell("50");
        table.AddCell("1500");

        document.Add(table);
    }
}

2. QuestPDF — современный и лаконичный API

QuestPDF — относительно молодая библиотека (с 2021 года), которая быстро набирает популярность. Её главная фишка — Fluent API, напоминающий работу с HTML/CSS. Код получается читаемым и компактным. QuestPDF полностью бесплатен для коммерческого использования (лицензия MIT).

Особенности:

  • Декларативное описание макета: контейнеры, колонки, строки.
  • Встроенная поддержка стилей, цветов, границ и фонов.
  • Автоматический перенос текста и подгонка таблиц.
  • Экспорт в PDF и XPS.

Пример: создание отчёта с помощью QuestPDF

using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;

public void CreateInvoice(string filePath)
{
    Document.Create(container =>
    {
        container.Page(page =>
        {
            page.Size(PageSizes.A4);
            page.Margin(2, Unit.Centimetre);
            page.DefaultTextStyle(x => x.FontSize(12));

            page.Header().Text("Счёт №123")
                .SemiBold().FontSize(24).FontColor(Colors.Blue.Darken2);

            page.Content().Table(table =>
            {
                table.ColumnsDefinition(columns =>
                {
                    columns.ConstantColumn(100);
                    columns.RelativeColumn();
                    columns.ConstantColumn(80);
                });

                table.Header(header =>
                {
                    header.Cell().Text("Наименование");
                    header.Cell().Text("Описание");
                    header.Cell().Text("Сумма");
                });

                table.Cell().Text("Консультация");
                table.Cell().Text("Разработка архитектуры");
                table.Cell().Text("50 000 руб.");
            });

            page.Footer().AlignCenter()
                .Text($"Сформировано: {DateTime.Now:dd.MM.yyyy}");
        });
    }).GeneratePdf(filePath);
}

3. PDFsharp — лёгкая и быстрая

PDFsharp — минималистичная библиотека для .NET (и .NET Core через пакет PDFsharp-MigraDoc). Она не перегружена функциями, но отлично справляется с базовыми задачами: текст, линии, фигуры, изображения. Идеально подходит для простых отчётов без сложной вёрстки.

Преимущества:

  • Очень маленький размер (около 1 МБ).
  • Нет зависимости от внешних библиотек.
  • Лицензия MIT — можно использовать в коммерческих проектах.

Пример: простой документ с текстом и линией

using PdfSharp                    

Рекомендаций