Генерация 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, Также в библиотеке
Сериализация объектов в TypeScript: Полное руководство
Геолокация и карты в PHP: обзор библиотек и инструментов
Авторизация и аутентификация в C++: библиотеки, примеры и реализация
Тестирование в PHP: обзор фреймворков и инструментов (PHPUnit, Pest, Codeception)