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 Также в библиотеке
Работа с Kafka в Java: библиотеки, настройка и примеры кода
Работа с Markdown в Go (Golang): библиотеки, парсинг и конвертация
Очереди задач в Go (Golang): лучшие библиотеки и инструменты
WebSocket библиотеки Rust: Tokio-tungstenite и async-tungstenite для реального времени
Работа с CSV в JavaScript (Node.js): библиотеки и инструменты