Określ Lokalizację Czcionek TrueType

Ten temat opisuje domyślne zachowanie Aspose.Words, gdy szuka czcionek TrueType, w tym różnice specyficzne dla systemu operacyjnego, i pokazuje, jak określić źródła czcionek użytkownika.

Klasa FontSourceBase służy do określania różnych źródeł czcionek. Istnieje kilka implementacji klasy FontSourceBase:

Szczegóły implementacji dla niektórych klas wyjaśniono poniżej.

Załaduj czcionki z Systemu

Istnieje specjalna klasa SystemFontSource, która jest zawsze używana domyślnie. Reprezentuje wszystkie czcionki TrueType zainstalowane w systemie. Dlatego możliwe jest utworzenie listy źródeł z SystemFontSource i innymi wymaganymi źródłami:

Pojedyncza instancja klasy SystemFontSource jest domyślnie zdefiniowana w FontSettings. W różnych systemach operacyjnych czcionki mogą znajdować się w różnych miejscach. Jednak użycie instancji FontSettings dla każdego dokumentu nie jest optymalnym rozwiązaniem. W większości przypadków użycie DefaultInstance powinno wystarczyć.

Instancje Per-document są potrzebne tylko wtedy, gdy wymagane jest użycie różnych źródeł czcionek dla różnych dokumentów, co jest rzadkim przypadkiem. Użycie kilku instancji FontSettings zmniejsza wydajność, ponieważ nie udostępniają pamięci podręcznej.

Gdzie Aspose.Words Szuka czcionek TrueType na Windows

W większości przypadków użytkownicy Windows nie napotykają znaczących problemów z pominiętymi czcionkami lub nieprawidłowymi układami. Zazwyczaj Aspose.Words przechodzi przez dokument, a gdy napotka łącze czcionki, z powodzeniem pobiera dane czcionki z folderu systemowego.

W Windows Aspose.Words najpierw pobiera wszystkie dostępne czcionki z folderu _%windir%\Fonts. To ustawienie będzie działać dla ciebie przez większość czasu. W razie potrzeby określasz własne foldery czcionek. Aspose.Words szuka również dodatkowych czcionek zarejestrowanych w kluczu rejestru HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts. Ponadto Windows 10 umożliwia instalację czcionek dla bieżącego użytkownika. Czcionki są umieszczane w folderze %userprofile%\AppData\Local\Microsoft\Windows\Fonts, a także określone w rejestrze HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Fonts, Gdzie Aspose.Words będzie szukać tych czcionek.

Jeśli dokument zawiera osadzone czcionki, Aspose.Words może odczytać odpowiednie dane czcionki z dokumentu i użyć ich do utworzenia układu dokumentu. Dokumenty mogą również zawierać łącza do czcionek, których nie ma w folderach systemowych, w takim przypadku działają następujące scenariusze:

  • Użytkownicy mogą konfigurować nowe źródła czcionek za pomocą klasy FontSettings
  • Aspose.Words może spróbować zastąpić pominiętą czcionkę podobną

Czcionki w systemach innych niżWindows

Aspose.Words będzie szukać czcionek w folderach czcionek systemowych. Lista tych folderów może być wyświetlana metodą GetSystemFontFolders. Jeśli nie znaleziono obsługiwanych czcionek, Aspose.Words użyje wbudowanej domyślnej czcionki Fanwood.ttf.

Ponieważ metryki czcionek Windows i non - Windows OS są różne, Aspose.Words robi wszystko, co możliwe, aby znaleźć podobną czcionkę i zbudować układ podobny do oryginału. Jednak nie zawsze jest to możliwe. W takich przypadkach klasa FontSettings powinna być używana do dodawania niestandardowych czcionek lub reguł zastępowania.

Gdzie Aspose.Words Szuka czcionek TrueType na Linux

Różne dystrybucje Linux mogą przechowywać czcionki w różnych folderach. Aspose.Words szuka czcionek w kilku lokalizacjach. Domyślnie Aspose.Words szuka czcionek we wszystkich następujących lokalizacjach: /usr/share/fonts, /usr/local/share/fonts, /usr/X11R6/lib/X11/fonts. To domyślne zachowanie będzie działać dla większości dystrybucji Linux, ale nie ma gwarancji, że będzie działać przez cały czas, w takim przypadku może być konieczne jawne określenie lokalizacji czcionek true type. Aby to zrobić, musisz wiedzieć, gdzie TrueType czcionki są zainstalowane w twojej dystrybucji Linux.

Gdzie Aspose.Words Szuka czcionek TrueType na Mac OS X

Aspose.Words szuka czcionek w folderze /Library/Fonts, który jest standardową lokalizacją czcionek TrueType na Mac OS X. Chociaż to ustawienie będzie działać przez większość czasu, może być konieczne określenie własnych folderów czcionek w przypadku, gdy zajdzie taka potrzeba.

TrueType czcionki na Android

W Android przepływ pracy czcionek jest zamknięty w klasie krój pisma. Istnieje pięć typów krojów pisma, każdy krój pisma reprezentuje grupę podobnych rodzin czcionek:

  • DEFAULT
  • DEFAULT_BOLD
  • MONOSPACE
  • SANS_SERIF
  • SERIF

Na przykład, zgodnie z Android fonts.xml plik konfiguracyjny, " times “należy do rodziny” serif", więc NotoSerif-regularny.ttf będzie używany, gdy wymagane jest " czasy:

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" />

Aby wyszukać podobne czcionki, stosuje się strategie opisane wcześniej.

Oprócz nich Aspose.Words ma własną listę zamienników platformy Android.

Załóżmy, że dokument zawiera czcionkę PMingLiU - ExtB, przede wszystkim Aspose.Words szuka wymaganej czcionki w źródłach systemowych.

Domyślna lista folderów czcionek Android to:

  • / system / czcionki
  • / system / czcionka
  • / data / czcionki

Aspose.Words przegląda zdefiniowane przez użytkownika źródła, które zostały ustawione za pomocą metody:

Java

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

W przypadku wyraźnego zastąpienia, Aspose.Words zastępuje brakującą czcionkę sugestią użytkownika:

Java

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

Jeśli żadna z reguł nie zadziałała, Aspose.Words Sprawdź wewnętrzną tabelę wymiany. Jeśli tabela zawiera informacje o dobrym dopasowaniu, czcionka zostanie zastąpiona. W naszym przypadku Aspose.Words wybierze Typeface.SERIF. Ale jeśli tabela nie wie nic o żądanej czcionce, Aspose.Words wybiera czcionkę opartą na specjalnych regułach MS Word lub najbliższej odległości w przestrzeni Panose.

TrueType czcionki na .NET Core i Xamarin

Dla .NET Core i Xamarin obowiązuje ta sama reguła, co dla Aspose.Words dla wersji Java. Domyślnie dostępne są wszystkie czcionki systemowe platformy, na której działa aplikacja. Listę folderów, w których zostanie przeprowadzone wyszukiwanie, można znaleźć, wywołując metodę:

Java

SystemFontSource()->GetAvailableFonts()

Załaduj czcionki z folderu

Jeśli przetwarzany dokument zawiera łącza do czcionek, których nie ma w systemie lub nie chcesz dodawać ich do folderu systemowego lub nie masz uprawnień, najlepszym rozwiązaniem byłoby dodanie folderu z własnymi czcionkami przy użyciu metody SetFontsSources. Umożliwi to zastąpienie źródła systemowego źródłem użytkownika. Aspose.Words nie będzie już szukał czcionek w folderze rejestru lub Windows\Font, a zamiast tego skanuje tylko czcionki w określonych folderach. Metoda GetFontSources zwróci odpowiednie wartości.

Określ jeden lub wiele folderów czcionek

Metody SetFontsFolder i SetFontsFolders są skrótami do metody SetFontSources z jedną lub kilkoma instancjami FolderFontSource. Metody te służą do wskazania, gdzie Aspose.Words powinien szukać czcionek. Jeśli folder nie istnieje lub jest niedostępny, Aspose.Words po prostu ignoruje ten folder. Jeśli wszystkie foldery, w tym Źródła podstawienia czcionki, zostały zignorowane, Aspose.Words użyje czcionki Fanwood jako domyślnej.

Poniższy przykład pokazuje, jak ustawić folder lub źródło, które Aspose.Words będzie następnie używane do wyszukiwania czcionek TrueType podczas renderowania lub osadzania czcionek:

Możesz pobrać plik szablonu tego przykładu z Aspose.Words GitHub.

Dodatkowy parametr logiczny kontroluje, czy czcionki są skanowane rekurencyjnie przez wszystkie foldery, a tym samym skanuje wszystkie foldery podrzędne określonego folderu. Poniższy przykład pokazuje, jak ustawić Aspose.Words, aby szukał czcionek TrueType w wielu folderach podczas renderowania lub osadzania czcionek:

Zwróć uwagę na priorytety. Jeśli istnieją czcionki o tej samej nazwie rodziny i stylu w różnych źródłach czcionek, Aspose.Words wybierze czcionkę ze źródła o wyższym priorytecie. Zobacz opis pola “priorytet” poniżej.

Jeśli w ogóle nie chcesz używać czcionek systemowych, Aspose.Words pozwala je zignorować i używać tylko własnych czcionek:

C++

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

Właściwość Priorytetowa

Właściwość Priority jest używana, gdy istnieją czcionki o tej samej nazwie rodziny i stylu w różnych źródłach czcionek. W tym przypadku Aspose.Words wybiera czcionkę ze źródła o wyższej wartości priorytetu. Na przykład w folderze systemowym znajduje się stara wersja czcionki, a Klient dodał nową wersję tej samej czcionki w folderze niestandardowym.

C++

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

Załaduj czcionki ze strumienia

Aspose.Words zapewnia klasę StreamFontSource, która umożliwia ładowanie czcionek ze strumienia. Aby użyć źródła czcionki stream, użytkownik musi utworzyć klasę pochodną z StreamFontSource i zapewnić implementację metody OpenFontDataStream. Metodę OpenFontDataStream można wywołać kilka razy. Po raz pierwszy zostanie wywołany, gdy Aspose.Words skanuje dostarczone źródła czcionek, aby uzyskać listę dostępnych czcionek. Później można go wywołać, jeśli czcionka jest używana w dokumencie do analizowania danych czcionki i osadzania danych czcionki w niektórych formatach wyjściowych. StreamFontSource może być przydatny, ponieważ umożliwia ładowanie danych czcionek tylko wtedy, gdy jest to wymagane, a nie przechowywanie ich w pamięci przez okres użytkowania FontSettings.

StreamFontSource

Zapisz i załaduj pamięć podręczną wyszukiwania czcionek

Podczas wyszukiwania czcionki po raz pierwszy Aspose.Words iteruje po źródłach czcionek określonych przez użytkownika i tworzy pamięć podręczną wyszukiwania czcionek na podstawie danych z tych źródeł. W ten sposób pamięć podręczna zbierze informacje o dostępnych czcionkach: rodzinie czcionek, stylu, pełnej nazwie czcionki i innych. Przy kolejnych wywołaniach Aspose.Words wyszukuje informacje o żądanej czcionce według jej nazwy w pamięci podręcznej wyszukiwania czcionek, po czym analizuje określone pliki, aby użyć czcionki.

Procedura analizowania wszystkich dostępnych plików czcionek w celu zainicjowania pamięci podręcznej jest dość czasochłonna. Aspose.Words umożliwia zapisanie i załadowanie pamięci podręcznej przy użyciu metody SaveSearchCache w celu rozwiązania problemu z wydajnością. Oznacza to, że użytkownik może załadować wcześniej zapisaną pamięć podręczną z pliku i pominąć etap analizowania wszystkich dostępnych plików czcionek.

Pobierz listę dostępnych czcionek

Jeśli chcesz uzyskać listę dostępnych czcionek, które na przykład mogą być użyte do renderowania dokumentu PDF, możesz użyć metody GetAvailableFonts, Jak pokazano w poniższym przykładzie kodu. Klasa PhysicalFontInfo określa informacje o fizycznej czcionce dostępnej dla Aspose.Words font engine: