iTextSharp для C# (.NET): полное руководство с примерами

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

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

Начать курс

Введение в iTextSharp: что это и зачем нужно

iTextSharp — это мощная библиотека для генерации и обработки PDF-документов на платформе .NET (C#, VB.NET, F#). Она является портом популярной Java-библиотеки iText и предоставляет разработчикам полный контроль над созданием, модификацией и чтением PDF-файлов.

Основные возможности iTextSharp:

  • Создание PDF-документов с нуля
  • Добавление текста, изображений, таблиц, списков
  • Работа с шрифтами (включая кириллицу и Unicode)
  • Вставка гиперссылок, закладок, метаданных
  • Шифрование и защита паролем
  • Слияние и разделение PDF-файлов
  • Добавление водяных знаков и колонтитулов
  • Работа с формами (AcroForms)

Библиотека широко используется в корпоративных приложениях для генерации отчетов, счетов, накладных, сертификатов и других документов. iTextSharp поддерживает .NET Framework 2.0+ и .NET Core (через iTextSharp.LGPLv2.Core).

Установка iTextSharp

Для установки iTextSharp в проект .NET используется NuGet Package Manager. Существует несколько версий библиотеки:

  • iTextSharp (старая версия 5.x, LGPL) — бесплатная, но с ограничениями
  • iTextSharp.LGPLv2.Core — форк для .NET Core / .NET 5+
  • iText7 (iText.LGPLv2.Core) — новая версия iText 7 для .NET

Установка через Package Manager Console:

Install-Package iTextSharp.LGPLv2.Core -Version 1.7.0

Установка через .NET CLI:

dotnet add package iTextSharp.LGPLv2.Core --version 1.7.0

Установка через Visual Studio NuGet UI:

  1. Правый клик на проекте → "Manage NuGet Packages"
  2. Поиск: "iTextSharp.LGPLv2.Core"
  3. Выбрать версию и нажать "Install"

Важно: Для работы с кириллицей и другими нестандартными шрифтами потребуется дополнительная настройка (см. раздел "Советы").

Быстрый старт: создание первого PDF-документа

Рассмотрим минимальный пример создания PDF-файла с текстом "Hello, World!":

using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

class Program
{
    static void Main()
    {
        // Создаем документ
        Document doc = new Document();
        
        // Создаем поток для записи в файл
        using (FileStream fs = new FileStream("HelloWorld.pdf", FileMode.Create))
        {
            // Получаем экземпляр PdfWriter
            PdfWriter writer = PdfWriter.GetInstance(doc, fs);
            
            // Открываем документ
            doc.Open();
            
            // Добавляем параграф с текстом
            doc.Add(new Paragraph("Hello, World!"));
            
            // Закрываем документ
            doc.Close();
        }
        
        Console.WriteLine("PDF создан успешно!");
    }
}

Этот код создаст файл HelloWorld.pdf в папке с исполняемым файлом. Обратите внимание на последовательность: создание Document → открытие → добавление контента → закрытие.

Основные методы и функции iTextSharp

Рассмотрим 10 ключевых методов/классов библиотеки с подробным описанием и примерами.

1. Document (класс)

Что делает: Представляет сам PDF-документ. Управляет страницами, полями и ориентацией.

Параметры конструктора:

  • Rectangle pageSize — размер страницы (например, PageSize.A4)
  • float marginLeft, marginRight, marginTop, marginBottom — отступы

Пример:

// Создание документа A4 с альбомной ориентацией и кастомными полями
Document doc = new Document(PageSize.A4.Rotate(), 50, 50, 30, 30);
doc.Open();
doc.Add(new Paragraph("Альбомная ориентация"));
doc.Close();

2. PdfWriter.GetInstance()

Что делает: Связывает документ с выходным потоком (файл, MemoryStream и т.д.).

Параметры:

  • Document document — экземпляр документа
  • Stream stream — поток для записи

Пример с MemoryStream:

using (MemoryStream ms = new MemoryStream())
{
    Document doc = new Document();
    PdfWriter writer = PdfWriter.GetInstance(doc, ms);
    doc.Open();
    doc.Add(new Paragraph("PDF в памяти"));
    doc.Close();
    
    // Получаем байты
    byte[] pdfBytes = ms.ToArray();
}

3. Paragraph (класс)

Что делает: Создает текстовый абзац с возможностью форматирования.

Параметры:

  • string text — текст абзаца
  • Font font — шрифт (опционально)

Пример с форматированием:

BaseFont baseFont = BaseFont.CreateFont("c:/windows/fonts/arial.ttf", 
    BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font font = new Font(baseFont, 14, Font.BOLD, BaseColor.RED);

Paragraph p = new Paragraph("Форматированный текст", font);
p.Alignment = Element.ALIGN_CENTER;
doc.Add(p);

4. PdfPTable (класс)

Что делает: Создает таблицу в PDF-документе.

Параметры:

  • int numColumns — количество колонок
  • float totalWidth — общая ширина (опционально)

Пример таблицы:

PdfPTable table = new PdfPTable(3);
table.WidthPercentage = 100;

// Добавляем ячейки
table.AddCell("Имя");
table.AddCell("Возраст");
table.AddCell("Город");
table.AddCell("Иван");
table.AddCell("30");
table.AddCell("Москва");
table.AddCell("Мария");
table.AddCell("25");
table.AddCell("СПб");

doc.Add(table);

5. PdfPCell (класс)

Что делает: Настраивает отдельную ячейку таблицы (цвет, границы, выравнивание).

Пример:

PdfPCell cell = new PdfPCell(new Phrase("Заголовок"));
cell.BackgroundColor = BaseColor.LIGHT_GRAY;
cell.HorizontalAlignment = Element.ALIGN_CENTER;
cell.VerticalAlignment = Element.ALIGN_MIDDLE;
cell.Colspan = 2; // Объединение колонок
cell.Padding = 10;

table.AddCell(cell);

6. Image (класс)

Что делает: Вставляет изображение в документ.

Параметры:

  • string path — путь к файлу
  • byte[] data — массив байтов

Пример:

Image img = Image.GetInstance("logo.png");
img.ScaleToFit(200, 100); // Масштабирование
img.Alignment = Element.ALIGN_CENTER;
img.Border = Rectangle.BOX;
img.BorderColor = BaseColor.BLUE;
doc.Add(img);

7. Chunk (класс)

Что делает: Создает фрагмент текста с особым форматированием (цвет, подчеркивание, ссылка).

Пример с гиперссылкой:

Chunk link = new Chunk("Нажмите здесь");
link.SetAnchor("https://pythonlib.ru");
link.Font = FontFactory.GetFont(FontFactory.HELVETICA, 12, Font.UNDERLINE, BaseColor.BLUE);

doc.Add(new Paragraph(link));

8. PdfReader (класс)

Что делает: Читает существующий PDF-файл для извлечения данных или модификации.

Пример чтения метаданных:

PdfReader reader = new PdfReader("document.pdf");
int pages = reader.NumberOfPages;
string author = reader.Info["Author"];
string title = reader.Info["Title"];

Console.WriteLine($"Страниц: {pages}, Автор: {author}, Название: {title}");
reader.Close();

9. PdfStamper (класс)

Что делает: Модифицирует существующий PDF (добавляет водяные знаки, колонтитулы).

Пример добавления водяного знака:

PdfReader reader = new PdfReader("original.pdf");
using (FileStream fs = new FileStream("stamped.pdf", FileMode.Create))
{
    PdfStamper stamper = new PdfStamper(reader, fs);
    
    for (int i = 1; i <= reader.NumberOfPages; i++)
    {
        Rectangle pageSize = reader.GetPageSize(i);
        PdfContentByte over = stamper.GetOverContent(i);
        
        over.BeginText();
        over.SetFontAndSize(BaseFont.CreateFont(), 60);
        over.SetColorFill(BaseColor.LIGHT_GRAY);
        over.ShowTextAligned(Element.ALIGN_CENTER, "КОНФИДЕНЦИАЛЬНО", 
            pageSize.Width / 2, pageSize.Height / 2, 45);
        over.EndText();
    }
    
    stamper.Close();
}
reader.Close();

10. PdfCopy (класс)

Что делает: Копирует страницы из одного или нескольких PDF в новый документ (слияние).

Пример слияния двух PDF:

using (Document doc = new Document())
using (PdfCopy copy = new PdfCopy(doc, new FileStream("merged.pdf", FileMode.Create)))
{
    doc.Open();
    
    string[] files = { "file1.pdf", "file2.pdf" };
    foreach (string file in files)
    {
        PdfReader reader = new PdfReader(file);
        for (int i = 1; i <= reader.NumberOfPages; i++)
        {
            copy.AddPage(copy.GetImportedPage(reader, i));
        }
        reader.Close();
    }
    
    doc.Close();
}

Реальный практический пример: генерация счета-фактуры

Создадим полноценный счет-фактуру с таблицей, логотипом и нумерацией страниц:

using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

public class InvoiceGenerator
{
    public static void GenerateInvoice(string outputPath)
    {
        Document doc = new Document(PageSize.A4, 50, 50, 50, 50);
        
        using (FileStream fs = new FileStream(outputPath, FileMode.Create))
        {
            PdfWriter writer = PdfWriter.GetInstance(doc, fs);
            
            // Добавляем колонтитулы
            writer.PageEvent = new InvoiceFooter();
            
            doc.Open();
            
            // Заголовок
            BaseFont titleFont = BaseFont.CreateFont("c:/windows/fonts/arialbd.ttf", 
                BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
            Font titleStyle = new Font(titleFont, 24, Font.BOLD, BaseColor.DARK_GRAY);
            
            Paragraph title = new Paragraph("СЧЕТ-ФАКТУРА №123", titleStyle);
            title.Alignment = Element.ALIGN_CENTER;
            title.SpacingAfter = 30;
            doc.Add(title);
            
            // Информация о компании
            BaseFont normalFont = BaseFont.CreateFont("c:/windows/fonts/arial.ttf", 
                BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
            Font normalStyle = new Font(normalFont, 11);
            
            Paragraph companyInfo = new Paragraph(
                "ООО \"Ромашка\"\nИНН: 1234567890\nАдрес: г. Москва, ул. Ленина, д                    

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