PDF генерация в C# (.NET): Полный обзор библиотек и инструментов
Создание PDF-документов — одна из самых частых задач в корпоративной разработке. Отчёты, счета, накладные, договоры — всё это требует надёжного инструмента для генерации. В экосистеме C# (.NET) существует несколько мощных библиотек, каждая со своими особенностями. В этой статье мы разберём самые популярные варианты, их плюсы и минусы, а также приведём примеры кода.
1. iTextSharp / iText 7 для .NET
iText — де-факто стандарт в мире генерации PDF. Библиотека существует с 2000 года и активно развивается. Для .NET доступна версия iText 7 (NuGet-пакет itext7).
Возможности:
- Полный контроль над содержимым: текст, таблицы, изображения, аннотации.
- Работа с формами (AcroForms), цифровыми подписями, шифрованием.
- Поддержка PDF/A (архивное хранение).
- Высокая производительность.
Недостатки:
- Сложный API (низкоуровневая работа с координатами).
- Для коммерческого использования требуется платная лицензия (AGPL для open-source).
Пример создания простого PDF:
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
public void CreatePdf(string filePath)
{
using (var writer = new PdfWriter(filePath))
using (var pdf = new PdfDocument(writer))
using (var document = new Document(pdf))
{
document.Add(new Paragraph("Привет, мир!"));
document.Add(new Paragraph("Это PDF, созданный с помощью iText 7."));
}
}
2. PDFsharp
PDFsharp — легковесная open-source библиотека для .NET (также есть версия для GDI+). Отлично подходит для простых задач: создание документов с текстом, таблицами, изображениями.
Возможности:
- Простой и интуитивный API.
- Поддержка шрифтов (включая кириллицу).
- Работа с графическими примитивами (линии, фигуры).
- Бесплатная (MIT лицензия).
Недостатки:
- Ограниченная поддержка сложных элементов (формы, закладки).
- Медленнее iText на больших объёмах.
Пример:
using PdfSharp.Pdf;
using PdfSharp.Drawing;
public void CreatePdf(string filePath)
{
using (var document = new PdfDocument())
{
var page = document.AddPage();
using (var gfx = XGraphics.FromPdfPage(page))
{
var font = new XFont("Arial", 20, XFontStyle.Regular);
gfx.DrawString("Привет, мир!", font, XBrushes.Black,
new XPoint(40, 100));
}
document.Save(filePath);
}
}
3. QuestPDF
QuestPDF — современная библиотека с fluent API, вдохновлённая концепцией "layout-first". Позволяет описывать структуру документа декларативно, что сильно упрощает создание сложных макетов.
Возможности:
- Декларативный стиль (как WPF или HTML).
- Автоматическая разбивка на страницы (pagination).
- Поддержка таблиц, заголовков, колонтитулов.
- Бесплатная версия с ограничением (до 10 страниц).
Недостатки:
- Бесплатная версия ограничена.
- Меньше гибкости, чем у iText (сложно рисовать произвольную графику).
Пример:
using QuestPDF.Fluent;
using QuestPDF.Helpers;
using QuestPDF.Infrastructure;
public void CreatePdf(string filePath)
{
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(30);
page.Content().Column(col =>
{
col.Item().Text("Привет, мир!").FontSize(20);
col.Item().Text("Это QuestPDF.").FontSize(14);
});
});
}).GeneratePdf(filePath);
}
4. IronPDF
IronPDF — коммерческая библиотека, которая умеет конвертировать HTML в PDF. Идеально, если у вас уже есть шаблоны на HTML/CSS.
Возможности:
- Конвертация HTML+CSS+JavaScript в PDF.
- Поддержка современных стандартов CSS (Flexbox, Grid). <