PDF генерация в C# (.NET): Полное руководство по библиотекам

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

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

Начать курс

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

Генерация PDF-документов — одна из частых задач в корпоративных и веб-приложениях на C#. Отчёты, счета, накладные, сертификаты — всё это удобно формировать в формате PDF. В экосистеме .NET существует несколько мощных библиотек, как платных, так и бесплатных. В этой статье мы разберём самые популярные инструменты, их возможности и приведём примеры кода.

Популярные библиотеки для работы с PDF в .NET

  • iTextSharp / iText 7 — одна из старейших и самых функциональных библиотек. Платная версия (iText 7) для коммерческого использования, но есть legacy-версия iTextSharp под LGPL.
  • PdfSharp / MigraDoc — бесплатная библиотека с открытым исходным кодом. Отлично подходит для простых документов и отчётов.
  • QuestPDF — современная библиотека с fluent API. Бесплатна для коммерческого использования (MIT лицензия). Позволяет создавать сложные документы с минимальным кодом.
  • IronPDF — платная библиотека, но с очень мощным функционалом: конвертация HTML в PDF, работа с формами, защита паролем.
  • SelectPdf — ещё один платный инструмент с поддержкой HTML to PDF и множеством настроек.

Установка библиотек через NuGet

Все библиотеки устанавливаются стандартным способом через менеджер пакетов NuGet. Примеры установки:

// Для PdfSharp
Install-Package PdfSharp

// Для QuestPDF
Install-Package QuestPDF

// Для iTextSharp (legacy)
Install-Package iTextSharp.LGPLv2.Core

Пример 1: Создание PDF с помощью PdfSharp

PdfSharp — отличный выбор для простых задач. Ниже пример создания документа с текстом и таблицей:

using PdfSharp.Pdf;
using PdfSharp.Drawing;

class Program
{
    static void Main()
    {
        // Создаём новый PDF-документ
        PdfDocument document = new PdfDocument();
        PdfPage page = document.AddPage();
        XGraphics gfx = XGraphics.FromPdfPage(page);

        // Рисуем текст
        XFont font = new XFont("Arial", 14);
        gfx.DrawString("Привет, мир PDF!", font, XBrushes.Black,
            new XRect(10, 10, page.Width, page.Height), XStringFormats.TopLeft);

        // Сохраняем документ
        document.Save("HelloWorld.pdf");
        Console.WriteLine("PDF создан!");
    }
}

Пример 2: Генерация отчёта с QuestPDF

QuestPDF предлагает элегантный Fluent API. Создадим простой счёт-фактуру:

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

class Program
{
    static void Main()
    {
        Document.Create(container =>
        {
            container.Page(page =>
            {
                page.Size(PageSizes.A4);
                page.Margin(2, Unit.Centimetre);
                page.DefaultTextStyle(x => x.FontSize(12));

                page.Header().Element(ComposeHeader);
                page.Content().Element(ComposeContent);
                page.Footer().AlignCenter().Text("Страница {0} из {1}",
                    x => x.CurrentPageNumber(), x => x.TotalPages());
            });
        }).GeneratePdf("Invoice.pdf");

        Console.WriteLine("Счёт создан!");
    }

    static void ComposeHeader(IContainer container)
    {
        container.Row(row =>
        {
            row.RelativeItem().Column(column =>
            {
                column.Item().Text("СЧЕТ-ФАКТУРА").Bold().FontSize(20);
                column.Item().Text($"Дата: {DateTime.Now:dd.MM.yyyy}");
            });
            row.ConstantItem(100).Image(Placeholders.Image(100, 100));
        });
    }

    static void ComposeContent(IContainer container)
    {
        container.Table(table =>
        {
            // Заголовки таблицы
            table.ColumnsDefinition(columns =>
            {
                columns.RelativeColumn(3);
                columns.RelativeColumn();
                columns.RelativeColumn();
                columns.RelativeColumn();
            });

            table.Header(header =>
            {
                header.Cell().Text("Наименование").Bold();
                header.Cell().Text("Кол-во").Bold();
                header.Cell().Text("Цена").Bold();
                header.Cell().Text("Сумма").Bold();
            });

            // Строки данных
            for (int i = 0; i < 5; i++)
            {
                table.Cell().Text($"Товар {i+1}");
                table.Cell().Text($"{i+1} шт.");
                table.Cell().Text($"{100 + i*10} руб.");
                table.Cell().Text($"{(100 + i*10) * (i+1)} руб.");
            }
        });
    }
}

Пример 3: HTML в PDF с помощью IronPDF (платная лицензия)

IronPDF позволяет конвертировать HTML-разметку напрямую в PDF. Это очень удобно, если у вас уже есть готовые шаблоны страниц:

using IronPdf;

class Program
{
    static void                    

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