Вопрос или проблема
Я пытаюсь добавить свой кастомный шрифт в этот пример в 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, убедитесь, что:
- Шрифт присутствует: Путь к файлу шрифта должен быть правильным и файл должен действительно существовать.
- Шрифт корректный: Проверьте, что шрифт правильно загружается с помощью
fontProvider.GetFont
и его имя совпадает с тем, как вы его используете в коде. - Конфигурация проекта: Убедитесь, что у вас установлены все необходимые NuGet-пакеты и что проект правильно настроен для работы с iText7.
Заключение
Правильная интеграция пользовательских шрифтов в iText7 в проекте на C# .NET MAUI требует внимательного подхода к структуре каталогов, правильной инициализации FontProvider
и управления ресурсами. Следуйте указанным шагам, и вы сможете успешно генерировать PDF-документы с текстом на арабском языке с использованием вашего пользовательского шрифта. Если возникнут дополнительные вопросы, обращайтесь за помощью на специализированные форумы или в сообщества разработчиков .NET MAUI.