
Xamarin Forms позволяет создавать кроссплатформенные мобильные приложения с единым кодом на C#. Формирование PDF-документов напрямую в приложении помогает автоматизировать отчеты, счета, квитанции и техническую документацию без использования сторонних сервисов.
Для работы с PDF в Xamarin Forms чаще всего используют библиотеки Syncfusion PDF или iTextSharp. Они поддерживают создание страниц, вставку текста, таблиц и изображений, а также настройку шрифтов, цветов и отступов. Подключение пакета осуществляется через NuGet с учетом версии Xamarin.Forms и платформы Android/iOS.
Генерация PDF требует понимания структуры документа: каждая страница создается как отдельный объект, на который можно добавлять элементы с точным позиционированием. Для таблиц важно заранее определить количество строк и колонок, размеры ячеек и выравнивание текста. Изображения вставляются в формате PNG или JPEG с учетом масштабирования и DPI устройства.
После формирования документа необходимо правильно организовать сохранение на устройстве. На Android используется External Storage с запросом разрешений, на iOS – Documents Directory. Экспорт PDF может сопровождаться открытием файла в сторонних приложениях для просмотра или отправкой через почту или мессенджеры.
Установка и настройка библиотеки для работы с PDF

Для генерации PDF в Xamarin Forms рекомендуется использовать библиотеку Syncfusion PDF версии 20.4 или выше. Установка выполняется через NuGet: в проекте выбирают Manage NuGet Packages, затем ищут Syncfusion.Xamarin.Pdf и устанавливают для всех проектов – PCL, Android и iOS.
После установки необходимо инициализировать библиотеку в каждой платформе. Для Android в файле MainActivity.cs добавляется Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(«ВАШ_ЛИЦЕНЗИОННЫЙ_КЛЮЧ»);. Для iOS в AppDelegate.cs выполняется аналогичная регистрация. Без этого PDF-файлы будут создаваться с ограничениями.
В проекте PCL создается отдельный сервис для работы с PDF, который инкапсулирует методы создания документа, добавления текста и изображений. Это упрощает поддержку кода и обеспечивает одинаковый интерфейс для Android и iOS.
Важно проверять совместимость версии библиотеки с версией Xamarin.Forms: при использовании Forms 5.0 и выше рекомендуется устанавливать Syncfusion.Xamarin.Pdf не ниже 20.4.62. Несовпадение версий может вызвать ошибки сборки или некорректное отображение элементов в PDF.
Создание базовой структуры документа PDF

В Xamarin Forms создание PDF начинается с инициализации объекта PdfDocument. Для каждой страницы используется PdfPage, который добавляется через метод document.Pages.Add(). Размер страницы задается в точках: стандарт A4 – 595×842 pt.
Для точного управления разметкой важно задать margins страницы, обычно 40–50 pt со всех сторон. Это обеспечивает одинаковый отступ для текста и графики на разных устройствах. Используются свойства PdfMargins при создании страницы.
Каждая страница может содержать несколько PdfGraphics объектов, которые служат контейнерами для текста, изображений и линий. Создание отдельного объекта графики позволяет позиционировать элементы независимо, что упрощает добавление заголовков и таблиц на одной странице.
Для удобства генерации документов с одинаковой структурой рекомендуется создать метод CreateBaseDocument(), который возвращает объект PdfDocument с предустановленными размерами страницы, отступами и базовым шрифтом. Это сокращает повторение кода при создании нескольких PDF-файлов в проекте.
Добавление текста и форматирование содержимого
Для вставки текста в PDF используется объект PdfGraphics и метод DrawString(). Параметры включают текст, шрифт, цвет, позицию и размеры прямоугольника, в котором текст будет отображаться. Пример шрифта: PdfStandardFont(PdfFontFamily.Helvetica, 12).
Для форматирования текста можно использовать PdfStringFormat, задавая выравнивание (Left, Center, Right) и межстрочный интервал. Это позволяет создавать заголовки, абзацы и колонтитулы с точной структурой.
Разделение текста на страницы осуществляется автоматически, если включена функция PdfLayoutFormat. Она учитывает размеры области страницы и переносит текст, который не помещается, на следующую страницу, сохраняя стиль и форматирование.
Для акцентирования отдельных элементов используется жирный шрифт PdfFontStyle.Bold, курсив PdfFontStyle.Italic или изменение цвета через PdfBrushes. Комбинированное использование этих инструментов позволяет создавать структурированные и читабельные документы без необходимости ручного позиционирования каждого абзаца.
Вставка изображений и графических элементов

Для добавления изображений в PDF используется метод DrawImage() объекта PdfGraphics. Поддерживаются форматы PNG и JPEG. Изображение загружается через PdfBitmap с указанием пути или потока данных. Рекомендуется использовать изображения с разрешением не ниже 150 DPI для четкого отображения на мобильных устройствах.
Размер и позиция изображения задаются через координаты X и Y и ширину/высоту. Для сохранения пропорций применяют MaintainAspectRatio. Например, graphics.DrawImage(bitmap, 50, 100, 200, 150, true) разместит изображение с сохранением пропорций.
Графические элементы, такие как линии, прямоугольники и круги, создаются через методы DrawLine(), DrawRectangle() и DrawEllipse(). Эти элементы полезны для создания рамок, разделителей или графических блоков.
Для структурирования визуальных данных удобно использовать таблицы. Пример базовой таблицы:
| Элемент | Метод | Описание |
|---|---|---|
| Изображение | DrawImage() | Вставка PNG или JPEG с точными координатами и размерами |
| Прямоугольник | DrawRectangle() | Создание рамок и фонов для блоков текста |
| Линия | DrawLine() | Разделение секций документа или визуальные акценты |
| Эллипс | DrawEllipse() | Добавление графических элементов или иконок |
Формирование таблиц и списков в PDF

Для создания таблиц в PDF используется объект PdfGrid. Сначала задается количество колонок и строк, затем заполняются ячейки текстом или изображениями. Пример инициализации:
- PdfGrid grid = new PdfGrid();
- grid.Columns.Add(3); – три колонки
- Добавление строк через grid.Rows.Add()
Для форматирования ячеек применяются свойства:
- StringFormat – выравнивание текста
- Style.BackgroundBrush – цвет фона
- Style.Font – шрифт и размер
Списки формируются с помощью метода DrawString() и символов или номерации. Для упорядоченных списков используется префикс с цифрой, для маркированных – символы • или —. Рекомендуется поддерживать одинаковый отступ и межстрочный интервал для всех элементов списка.
- Создать текстовый блок с PdfGraphics.DrawString()
- Добавить префикс или маркер для каждой строки
- Использовать PdfStringFormat.LineSpacing для равномерного расстояния
Комбинирование таблиц и списков позволяет структурировать данные в отчетах и счетах, обеспечивая читаемость и точное позиционирование информации на странице.
Сохранение и экспорт PDF на устройствах Android и iOS
Для сохранения PDF на Android используется External Storage. Необходимо запросить разрешение WRITE_EXTERNAL_STORAGE в манифесте и при выполнении приложения. Файл сохраняется через поток:
- using (FileStream stream = new FileStream(path, FileMode.Create))
- document.Save(stream) – запись PDF
На iOS PDF сохраняется в директории документов приложения:
- string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), «file.pdf»);
- Используется FileStream для записи документа
Для экспорта и открытия PDF можно использовать стандартные приложения для просмотра или интеграцию с почтой и мессенджерами:
- Создать Intent на Android с MIME type application/pdf
- На iOS применить UIDocumentInteractionController для просмотра и отправки файла
- Добавить обработку исключений при отсутствии приложений для чтения PDF
Рекомендуется проверять размер файла перед экспортом и использовать сжатие изображений при необходимости. Это снижает нагрузку на устройства и ускоряет отправку документа по сети.
Тестирование и устранение ошибок при генерации PDF
При тестировании PDF важно проверять корректность отображения текста, изображений и таблиц на разных устройствах и разрешениях. Для этого создаются несколько тестовых документов с разнообразными элементами и шрифтами.
Частые ошибки включают:
- Пропадание текста из-за неправильного PdfLayoutFormat или превышения границ страницы
- Неправильное отображение изображений из-за несоответствия DPI или формата
- Сбой при сохранении на Android без разрешений WRITE_EXTERNAL_STORAGE
- Ошибки совместимости версий библиотеки Syncfusion с Xamarin.Forms
Для устранения проблем рекомендуется:
- Использовать try-catch вокруг операций генерации и сохранения PDF для отлавливания исключений
- Проверять размеры текста и изображений относительно PdfPage и margins
- Обновлять библиотеку Syncfusion до версии, совместимой с текущей версией Xamarin.Forms
- Проверять логи устройств на наличие ошибок при открытии файла
Регулярное тестирование на реальных устройствах и симуляторах позволяет выявить визуальные и функциональные несоответствия до публикации приложения.
Вопрос-ответ:
Какая библиотека лучше всего подходит для создания PDF в Xamarin Forms?
Для генерации PDF чаще всего используют библиотеку Syncfusion PDF, так как она поддерживает платформы Android и iOS, позволяет создавать страницы, добавлять текст, таблицы и изображения. Также доступна iTextSharp, но она требует больше ручного кода для форматирования и управления страницами.
Как задать шрифт и выравнивание текста в PDF-документе?
Для текста используется объект PdfGraphics и метод DrawString(), в котором указываются шрифт, размер и цвет. Выравнивание выполняется через PdfStringFormat с параметрами Left, Center, Right. Межстрочный интервал настраивается с помощью свойства LineSpacing.
Можно ли вставлять изображения в PDF и как сохранить пропорции?
Да, изображения вставляются через DrawImage() и PdfBitmap. Для сохранения пропорций используется параметр MaintainAspectRatio, который масштабирует картинку по ширине и высоте без искажения. Рекомендуется использовать PNG или JPEG с разрешением не ниже 150 DPI для четкого отображения на мобильных устройствах.
Как создать таблицу и заполнить ячейки текстом в PDF?
Используется объект PdfGrid. Сначала добавляются колонки через grid.Columns.Add(), затем строки через grid.Rows.Add(). Каждая ячейка заполняется текстом и форматируется через свойства Style.Font, Style.BackgroundBrush и StringFormat для выравнивания.
Каким образом сохранить PDF на устройствах Android и iOS?
На Android используется External Storage с запросом разрешения WRITE_EXTERNAL_STORAGE, файл создается через FileStream. На iOS PDF сохраняется в Documents Directory, путь формируется через Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments). После сохранения можно открыть документ через стандартные приложения для чтения PDF или отправить по почте.
Как правильно организовать генерацию PDF с несколькими страницами в Xamarin Forms?
Для создания документа с несколькими страницами используют объект PdfDocument. Каждая страница добавляется через document.Pages.Add() с заданием размеров и отступов. На каждой странице создается PdfGraphics, который позволяет добавлять текст, изображения, таблицы и линии. Чтобы текст автоматически переносился на следующую страницу, применяется PdfLayoutFormat, учитывающий границы страницы и размеры элементов. При работе с изображениями важно учитывать DPI и масштабирование, чтобы картинка не выходила за пределы страницы. Также рекомендуется формировать отдельные методы для добавления повторяющихся блоков, таких как заголовки и колонтитулы, чтобы обеспечить одинаковую структуру на всех страницах документа.
