Вкажіть розташування шрифтів TrueType

Цей розділ описує поведінку Aspose.Words за замовчуванням під час пошуку шрифтів TrueType, включаючи відмінності в операційній системі, та демонструє, як вказати власні джерела шрифтів.

Клас FontSourceBase використовується для вказівки різних джерел шрифтів. Існує кілька реалізацій класу FontSourceBase:

Деталі реалізації для деяких класів описані нижче.

Завантаження шрифтів із системи

Існує спеціальний клас SystemFontSource, який завжди використовується за замовчуванням. Він представляє всі шрифти TrueType, встановлені в системі. Таким чином, можна створити список джерел з SystemFontSource та будь-якими іншими необхідними джерелами:

За замовчуванням в FontSettings визначено один екземпляр класу SystemFontSource. У різних операційних системах шрифти можуть розташовуватися в різних місцях. Однак використання екземпляра FontSettings для кожного документа не є оптимальним рішенням. У більшості випадків використання DefaultInstance має бути достатньо.

Окремі екземпляри для кожного документа потрібні тільки в тому випадку, якщо потрібно використовувати різні джерела шрифтів для різних документів, що є рідкісним випадком. Використання декількох екземплярів FontSettings знижує продуктивність, оскільки вони не використовують спільний кеш.

Де Aspose.Words шукає TrueType шрифти в Windows

У більшості випадків Windows користувачі не стикаються з серйозними проблемами, пов’язаними з пропущеними шрифтами або неправильним розташуванням. Як правило, Aspose.Words переглядає документ і, знайшовши посилання на шрифт, успішно витягує дані про шрифт із системної папки.

В Windows, Aspose.Words спочатку використовуються всі доступні шрифти з папки _%windir%\Fonts. Ця настройка буде працювати для вас більшу частину часу. Ви можете вказати власні папки шрифтів, лише якщо це необхідно. Aspose.Words також здійснює пошук додаткових шрифтів, зареєстрованих у розділі реєстру HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts. Крім того, Windows 10 дозволяє встановити шрифти для поточного користувача. Шрифти поміщаються в папку %userprofile%\AppData\Local\Microsoft\Windows\Fonts і також вказуються в реєстрі HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Fonts, де Aspose.Words буде шукати ці шрифти.

Якщо документ містить вбудовані шрифти, Aspose.Words може зчитувати відповідні дані шрифту з документа та використовувати їх для створення макета документа. Документи також можуть містити посилання на Шрифти, яких немає в системних папках, і в цьому випадку можуть працювати такі сценарії:

  • Користувачі можуть налаштувати нові джерела шрифтів за допомогою класу FontSettings
  • Aspose.Words можна спробувати замінити пропущений шрифт на подібний

Шрифти в системах, відмінних відWindows

Aspose.Words буде шукати шрифти в системних папках шрифтів. Список цих папок можна переглянути за допомогою методу GetSystemFontFolders. Якщо підтримувані шрифти не знайдені, Aspose.Words використовуватиме вбудований шрифт за замовчуванням Fanwood.ttf.

Оскільки параметри шрифту Windows та шрифту, відмінного від Windows OS, різні, Aspose.Words робить все можливе, щоб знайти подібний шрифт і створити макет, подібний до оригінального. Однак це не завжди можливо. У цих випадках клас FontSettings слід використовувати для додавання спеціальних шрифтів або правил заміни.

Де Aspose.Words шукає TrueType шрифти в Linux

У різних дистрибутивах Linux шрифти можуть зберігатися в різних папках. Aspose.Words пошук шрифтів здійснюється в декількох місцях. За замовчуванням Aspose.Words здійснює пошук шрифтів у всіх наступних місцях: /usr/share/fonts, /usr/local/share/fonts, /usr/X11R6/lib/X11/fonts. Ця поведінка за замовчуванням буде працювати для більшості дистрибутивів Linux, але не гарантується, що вона буде працювати постійно, і в цьому випадку вам може знадобитися чітко вказати розташування шрифтів true type. Для цього вам потрібно знати, де встановлені шрифти TrueType у вашому дистрибутиві Linux.

Де Aspose.Words шукає TrueType шрифти в Mac OS X

Aspose.Words здійснює пошук шрифтів у папці /Library/Fonts, яка є стандартним розташуванням для TrueType шрифтів у Mac OS X. Хоча це налаштування буде працювати для вас більшу частину часу, у разі потреби вам може знадобитися вказати власні папки шрифтів.

TrueType шрифти на Android

Android робочий процес fonts інкапсульований у клас Typeface. Існує п’ять типів шрифтів, кожен з яких є групою подібних сімейств шрифтів:

  • DEFAULT
  • DEFAULT_BOLD
  • MONOSPACE
  • SANS_SERIF
  • SERIF

Наприклад, відповідно до Android - м fonts.xml конфігураційний файл " times “належить до сімейства” serif", тому при запиті" times " буде використовуватися NotoSerif-Regular.ttf:

Fonts.xml

<family name="serif">
        <font weight="400" style="normal">NotoSerif-Regular.ttf</font>
        <font weight="700" style="normal">NotoSerif-Bold.ttf</font>
        <font weight="400" style="italic">NotoSerif-Italic.ttf</font>
        <font weight="700" style="italic">NotoSerif-BoldItalic.ttf</font>
</family>
<alias name="times" to="serif" />
<alias name="times new roman" to="serif" />

Для пошуку схожих шрифтів використовуються стратегії, описані раніше.

На додаток до них, у Aspose.Words є свій власний список замін для платформи Android.

Припустимо, документ містить шрифт PMingLiU-ExtB, перш за все, Aspose.Words шукає потрібний шрифт в системних джерелах.

За замовчуванням список папок шрифту Android виглядає наступним чином:

  • / система / шрифти
  • / системний / шрифт
  • / дані / шрифти

Параметр Aspose.Words переглядає визначені користувачем джерела, які були встановлені методом:

Java

fontSettings->SetFontsFolder(u"C:\\MyFonts\\", true);

У разі, якщо була вказана явна Заміна, Aspose.Words замінює відсутній шрифт на запропонований Користувачем:

Java

fontSettings->get_SubstitutionSettings()->get_TableSubstitution()->SetSubstitutes(u"PMingLiU-ExtB", System::MakeArray<System::String>({ u"Liberation Serif" }));

Якщо жодне з правил не спрацювало, Aspose.Words перевірте внутрішню таблицю заміни. Якщо таблиця містить інформацію про відповідний шрифт, то шрифт буде замінений. У нашому випадку Aspose.Words вибере Typeface.SERIF. Але якщо таблиця нічого не знає про запитуваний Шрифт, то Aspose.Words вибирає шрифт на основі спеціальних правил MS Word або найближчої відстані в просторі панорами.

TrueType шрифти на .NET Core та Xamarin

Для .NET Core та Xamarin застосовується те саме правило, що і для Aspose.Words для версії Java. За замовчуванням доступні всі системні шрифти платформи, на якій запущено додаток. Список папок, в яких буде виконуватися пошук, можна знайти, викликавши метод:

Java

SystemFontSource()->GetAvailableFonts()

Завантажити шрифти з папки

Якщо документ, що обробляється, містить посилання на Шрифти, яких немає в системі, або ви не хочете додавати їх до системної папки, або у вас немає прав доступу, то найкращим рішенням буде додати папку власних шрифтів за допомогою методу SetFontsSources. Це дозволить замінити системний джерело на користувальницький. Aspose.Words більше не буде шукати шрифти в реєстрі або Windows\F папці ont, а натомість скануватиме шрифти лише у зазначених папках. Метод GetFontSources поверне відповідні значення.

Вкажіть одну або кілька папок шрифтів

Методи SetFontsFolder і SetFontsFolders є скороченнями до методу SetFontSources з одним або декількома екземплярами FolderFontSource. Ці методи використовуються для вказівки, де Aspose.Words слід шукати шрифти. Якщо папка не існує або недоступна, Aspose.Words просто ігнорує цю папку. Якщо всі папки, включаючи джерела для заміни шрифту, були проігноровані, Aspose.Words використовуватиме шрифт Fanwood за замовчуванням.

У наступному прикладі показано, як задати папку або джерело, які Aspose.Words згодом буде використовувати для пошуку шрифтів TrueType під час рендеринга або вбудовування шрифтів:

Ви можете завантажити файл шаблону для цього прикладу з сайту Aspose.Words GitHub.

Додатковий логічний параметр визначає, чи будуть шрифти перевірятися рекурсивно по всіх папках, отже, будуть перевірятися всі дочірні папки зазначеної папки. У наступному прикладі показано, як задати Aspose.Words для пошуку шрифтів TrueType в декількох папках при рендерингу або впровадженні шрифтів:

Зверніть увагу на пріоритети. Якщо різні джерела шрифтів мають шрифти з однаковою назвою сім’ї та стилем, тоді Aspose.Words вибере шрифт із джерела з вищим пріоритетом. Дивіться опис поля “пріоритет” нижче.

Якщо ви взагалі не хочете використовувати системні шрифти, Aspose.Words дозволяє ігнорувати їх і використовувати лише власні шрифти:

C++

System::SharedPtr<FontSettings> fontSettings = System::MakeObject<FontSettings>()->get_DefaultInstance();
fontSettings->SetFontsFolder(u"C:\\MyFonts\\", true);

Пріоритетна властивість

Властивість Priority використовується, коли в різних джерелах шрифтів є шрифти з однаковою назвою сімейства та стилем. У цьому випадку Aspose.Words вибирає шрифт із джерела з вищим значенням пріоритету. Наприклад, у системній папці є стара версія шрифту, а клієнт додав нову версію того самого шрифту до папки користувача.

C++

System::SharedPtr<FolderFontSource> folderFontSource = System::MakeObject<FolderFontSource>(u"C:\\MyFonts\\", true, 1);

Завантаження шрифтів із потоку

Aspose.Words надає клас StreamFontSource, який дозволяє завантажувати шрифти з потоку. Щоб використовувати джерело шрифтів stream, користувачеві потрібно створити похідний клас із StreamFontSource та надати реалізацію методу OpenFontDataStream. Метод OpenFontDataStream може бути викликаний кілька разів. Перший раз він буде викликаний, коли Aspose.Words перегляне надані джерела шрифтів, щоб отримати список доступних шрифтів. Пізніше це може бути викликано, якщо шрифт використовується в документі для аналізу даних шрифту та для вбудовування даних шрифту в деякі вихідні формати. StreamFontSource може бути корисним, оскільки дозволяє завантажувати дані шрифту лише тоді, коли це потрібно, а не зберігати їх у пам’яті протягом усього життя FontSettings.

StreamFontSource

Збереження та завантаження кешу пошуку шрифтів

При першому пошуку шрифту Aspose.Words виконується перебір джерел шрифтів, зазначених користувачем, і формується кеш пошуку шрифтів на основі даних з цих джерел. Таким чином, кеш буде збирати інформацію про доступні шрифти: сімейство шрифтів, стиль, повна назва шрифту та інші. При наступних викликах Aspose.Words виконує пошук інформації про потрібний шрифт за його назвою в кеші пошуку шрифтів, після чого аналізує зазначені файли для використання шрифту.

Процедура розбору всіх доступних файлів шрифтів для ініціалізації кешу займає досить багато часу. Aspose.Words дозволяє зберігати та завантажувати кеш за допомогою методу SaveSearchCache для вирішення проблеми продуктивності. Тобто користувач може завантажити раніше збережений кеш з файлу і пропустити етап розбору всіх доступних файлів шрифтів.

Отримати список доступних шрифтів

Якщо ви хочете отримати список доступних шрифтів, які, наприклад, можуть бути використані для візуалізації документа PDF, ви можете використовувати метод GetAvailableFonts, як показано в наступному прикладі коду. Клас PhysicalFontInfo визначає інформацію про фізичний шрифт, доступний для двигуна шрифтів Aspose.Words: