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

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

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

Начать курс

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

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

1. iTextSharp (iText 7 для .NET)

iTextSharp — это порт популярной Java-библиотеки iText для .NET. Это наиболее зрелое и функциональное решение, поддерживающее сложные макеты, таблицы, изображения, аннотации и цифровые подписи. Однако коммерческое использование требует покупки лицензии (AGPL для open-source).

Установка

dotnet add package itext7

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

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

public void CreatePdfReport()
{
    string filePath = "report.pdf";
    using (PdfWriter writer = new PdfWriter(filePath))
    using (PdfDocument pdf = new PdfDocument(writer))
    using (Document document = new Document(pdf))
    {
        document.Add(new Paragraph("Отчёт по продажам за март")
            .SetBold().SetFontSize(18));

        Table table = new Table(3);
        table.AddCell("Товар");
        table.AddCell("Количество");
        table.AddCell("Цена");
        table.AddCell("Ноутбук");
        table.AddCell("12");
        table.AddCell("75 000 ₽");
        table.AddCell("Монитор");
        table.AddCell("5");
        table.AddCell("32 000 ₽");

        document.Add(table);
    }
}

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

2. QuestPDF

QuestPDF — современная библиотека с fluent-интерфейсом и встроенным движком рендеринга. Позволяет описывать документ в декларативном стиле, похожем на HTML/CSS. Идеально подходит для генерации типовых отчётов с повторяющимися элементами.

Установка

dotnet add package QuestPDF

Пример: инвойс с заголовком и таблицей

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

public byte[] GenerateInvoice()
{
    return Document.Create(container =>
    {
        container.Page(page =>
        {
            page.Size(PageSizes.A4);
            page.Margin(20);
            page.Header().Text("Счёт № 12345")
                .SemiBold().FontSize(20).FontColor(Colors.Blue.Darken2);

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

                table.Header(header =>
                {
                    header.Cell().Background(Colors.Grey.Lighten3).Text("Услуга");
                    header.Cell().Background(Colors.Grey.Lighten3).Text("Стоимость");
                    header.Cell().Background(Colors.Grey.Lighten3).Text("Кол-во");
                });

                table.Cell().Text("Консультация");
                table.Cell().Text("5 000 ₽");
                table.Cell().Text("2");

                table.Cell().Text("Разработка");
                table.Cell().Text("15 000 ₽");
                table.Cell().Text("1");
            });

            page.Footer().AlignCenter().Text("Спасибо за сотрудничество!");
        });
    }).GeneratePdf();
}

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

3. PdfSharp

PdfSharp — легковесная библиотека с открытым исходным кодом. Работает на низком уровне, позволяет рисовать линии, текст и фигуры напрямую на странице. Хороший выбор для простых документов без сложной вёрстки.

Установка

dotnet add package PdfSharp

Пример: текст и линии

using PdfSharp.Pdf;
using PdfSharp.Drawing;

public void DrawSimpleDocument()
{
    PdfDocument document = new PdfDocument();
    PdfPage page = document.AddPage();
    XGraphics gfx = XGraphics.FromPdfPage(page);

    XFont font = new XFont("Arial", 14, XFontStyle.Bold);
    gfx.DrawString("Привет, PDF!", font, XBrushes.Black,
        new XPoint(100, 100));

    XPen pen = new XPen(XColors.Red, 2);
    gfx.DrawLine(pen,                    

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