Установите пользовательский шрифт в iText7 C# .NET MAUI проекте для PDF

Вопрос или проблема

Я пытаюсь добавить свой кастомный шрифт в этот пример в Maui, но у меня постоянно не получается. Я проверял имя семейства шрифтов в интернете, и оно правильное. Кто-нибудь работал с этим примером здесь?

// Получаем директорию приложения
string appDirectory = FileSystem.AppDataDirectory;

// constructing the complete path to your font file
string fontFilePath = Path.Combine(appDirectory, "Resources", "Raw", "pdms-saleem-quranfont.ttf");

PdfWriter writer = new PdfWriter(filePath);
PdfDocument pdfDocument = new PdfDocument(writer);
Document document = new Document(pdfDocument);
FontSet set = new FontSet();
set.AddFont(fontFilePath);
//set.AddFont("NotoSansTamil-Regular.ttf");
//set.AddFont("FreeSans.ttf");
document.SetFontProvider(new FontProvider(set));
document.SetProperty(Property.FONT, new String[] { "_PDMS_Saleem_QuranFont" });
Paragraph paragraph = new Paragraph();
paragraph.SetTextAlignment(iText.Layout.Properties.TextAlignment.RIGHT);
paragraph.Add(TheOpeningText);
document.Add(paragraph);

Ошибка:

"FontProvider и FontSet пусты. Невозможно разрешить имя семейства шрифтов (см. ElementPropertyContainer#setFontFamily) без инициализированного FontProvider (см. RootElement#setFontProvider)."

Я пытался добавлять новые шрифты в пример, найденный в документации iText, но этот пример сам по себе не предназначен для Maui, поэтому я пытаюсь перенести этот пример, чтобы он работал в проекте Maui. Ожидание состоит в том, чтобы получить рабочий проект, который может генерировать PDF с арабским текстом, используя кастомный шрифт.

Ссылка на MVP: https://github.com/takasurazeem/MauiGeneratePdfSample/blob/Arabic-Font/MauiPdfJsViewerSample/MainPage.xaml.cs

Ответ или решение

Чтобы добавить пользовательский шрифт в проект PDF на C# .NET MAUI с использованием iText7, необходимо учесть несколько важных моментов и шагов. Вот детальная инструкция, которая поможет вам успешно интегрировать пользовательский шрифт в ваше приложение и избежать ошибок, таких как "FontProvider and FontSet are empty":

Шаг 1: Подготовка шрифта

Убедитесь, что файл шрифта (например, pdms-saleem-quranfont.ttf) находится в нужной директории вашего проекта. В MAUI обычно рекомендуется хранить ресурсы в папке /Resources/Raw. Убедитесь, что шрифт помечен как EmbeddedResource в свойствах файла, чтобы он был доступен на этапе выполнения.

Шаг 2: Настройка пути к шрифтам

Убедитесь, что вы правильно указываете путь к файлу шрифта. На платформах .NET MAUI вам может понадобиться использовать подходящий метод для получения пути к директории приложения. В вашем коде это сделано правильно, но важно убедиться, что fontFilePath действительно указывает на правильный файл.

Шаг 3: Инициализация шрифта

Используйте следующий код для инициализации и добавления пользовательского шрифта с учетом потенциальных проблем, которые вы ранее упомянули:

using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Properties;
using iText.Layout.Font;

// Получаем директорию приложения
string appDirectory = FileSystem.AppDataDirectory;

// Конструируем полный путь к вашему файлу шрифта
string fontFilePath = Path.Combine(appDirectory, "Resources", "Raw", "pdms-saleem-quranfont.ttf");

// Инициализируем PDF-документ
string filePath = Path.Combine(appDirectory, "MyDocument.pdf");
PdfWriter writer = new PdfWriter(filePath);
PdfDocument pdfDocument = new PdfDocument(writer);
Document document = new Document(pdfDocument);

// Создаем новый FontSet и добавляем шрифт
FontSet fontSet = new FontSet();
fontSet.AddFont(fontFilePath); // Замените на тип шрифта, который вы используете

// Устанавливаем FontProvider
FontProvider fontProvider = new FontProvider();
fontProvider.AddFont(fontFilePath);
document.SetFontProvider(fontProvider);

// Добавляем текст с использованием пользовательского шрифта
Paragraph paragraph = new Paragraph();
paragraph.SetTextAlignment(TextAlignment.RIGHT);
paragraph.SetFont(fontProvider.GetFont(fontFilePath, 12));
paragraph.Add("Ваш текст на арабском языке");

document.Add(paragraph);

// Закрываем документ
document.Close();

Шаг 4: Проверка ошибок

Если вы сталкиваетесь с ошибкой, связанной с незаполненным FontProvider или FontSet, убедитесь, что:

  1. Шрифт присутствует: Путь к файлу шрифта должен быть правильным и файл должен действительно существовать.
  2. Шрифт корректный: Проверьте, что шрифт правильно загружается с помощью fontProvider.GetFont и его имя совпадает с тем, как вы его используете в коде.
  3. Конфигурация проекта: Убедитесь, что у вас установлены все необходимые NuGet-пакеты и что проект правильно настроен для работы с iText7.

Заключение

Правильная интеграция пользовательских шрифтов в iText7 в проекте на C# .NET MAUI требует внимательного подхода к структуре каталогов, правильной инициализации FontProvider и управления ресурсами. Следуйте указанным шагам, и вы сможете успешно генерировать PDF-документы с текстом на арабском языке с использованием вашего пользовательского шрифта. Если возникнут дополнительные вопросы, обращайтесь за помощью на специализированные форумы или в сообщества разработчиков .NET MAUI.

Оцените материал
Добавить комментарий

Капча загружается...