Генерация 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