Czcionka zapasowa i tekst pionowy
HotPDF potrafi wybierać kroje zapasowe według skryptu Unicode, zgłaszać punkty kodowe pozostające nierozstrzygnięte i zapisywać tekst CJK przez rzeczywisty pionowy tryb zapisu CID
Document-level fallback chains
THotPDF.SetFontFallbackChain przechowuje uporządkowaną listę krojów dla jednej kategorii THPDFFontScript
THPDFPage.TextOutWithFallback rozstrzyga każdą wartość skalarną Unicode wobec wybranego kroju, jego łańcucha skryptów i łańcucha wspólnego, a następnie emituje sąsiadujące skalary o tym samym kroju jako jeden przebieg tekstowy
- Łańcuchy zapasowe są ustawieniami dokumentu i pozostają dostępne na wszystkich stronach
- Zduplikowane i puste nazwy krojów są usuwane, a kolejność wywołującego zachowana
- Sondowanie zainstalowanych krojów odrzuca ciche podstawienie GDI przed zaakceptowaniem pokrycia
- Skalary płaszczyzny uzupełniającej są dekodowane z par zastępczych UTF-16 przed klasyfikacją
- Każdy przebieg zapasowy używa istniejącego osadzonego fontu Type0, dzielenia na podzbiory,
ToUnicodei współdzielonej między stronami ścieżki czcionki - Layout zapasowy sprawdza zainstalowane rodziny fontów z żądanym krojem bold i italic, zachowuje wszystkie ustawienia stylu czcionki, zestawu znaków, rozmiaru i kierunku zapisu między przebiegami, a po wszystkim przywraca font wywołującego
Actionable diagnostics
AnalyzeUnresolvedGlyphs wykonuje inspekcję pokrycia tylko do odczytu, podczas gdy TextOutWithFallback rejestruje nierozstrzygnięte skalary napotkane podczas wyjścia
Każdy THPDFUnresolvedGlyphInfo zawiera punkt kodowy skalara, kroj podstawowy, sklasyfikowany skrypt oraz rozdzieloną średnikami listę sugestii zapasowych
GetUnresolvedGlyphs zwraca bieżący raport dokumentu, a ClearUnresolvedGlyphs rozpoczyna nowy interwał raportowania
Przeciążenia z jawnym stylem metod THotPDF.ResolveFontForCodePoint i THotPDF.AnalyzeUnresolvedGlyphs przyjmują TFontStyles, dzięki czemu preflight może przejrzeć ten sam kroj, który zostanie użyty przy zapisie; ich pierwotne przeciążenia nadal sprawdzają kroje regularne
Boxy tekstowe, osadzony tekst SVG i wyglądy załadowanego tekstu zachowują rodziny fontów ze stylem przez cały layout zapasowy, zamiast traktować wewnętrzne nazwy fontów PDF jako rodziny systemowe albo przełączać każdy przebieg na krój regularny
Vertical CJK writing
THPDFPage.TextOutVertical wybiera wariant pionowy bieżącego kroju i emituje jeden przebieg tekstowy Identity-V zamiast pozycjonować każdy znak ręcznie
- Potomny font CID zawiera domyślne
/DW2oraz wpisy/W2specyficzne dla glifów - OpenType
vheaivmtxdostarczają pionowe przesunięcia i górne side bearingi; originy TrueType są wyliczane z bounding boxa każdegoglyf, aVORGdostarcza autorytatywne domyślne originy CFF i wyjątki - Czcionki bez tablic pionowych używają konfigurowalnych wartości domyślnych posunięcia 1000 jednostek i początku 880 jednostek
- Przy
sfVerticalAlternateskompletny przebieg GSUB zachowujący długość używavrt2, gdy font go deklaruje, a w przeciwnym razie wraca dovert, zachowując aktywny wybór skryptu i języka - Gdy font nie ma podstawienia interpunkcji, ale mapuje pionowe formy prezentacji Unicode, przecinki, kropki, nawiasy, myślniki, wielokropki i powiązana interpunkcja używają tych glifów, podczas gdy
ToUnicodezachowuje tekst źródłowy - Pionowe feature GPOS
vkrnivpalpozostają dostępne przezShapingFeatures GetVerticalTextAdvancezwraca posunięcie w przestrzeni użytkownika potrzebne do pozycjonowania następnego przebiegu pionowego
Przykład
PDF.SetFontFallbackChain(hfsCJK,
['Microsoft YaHei UI', 'Yu Gothic UI', 'Malgun Gothic']);
PDF.SetFontFallbackChain(hfsEmoji, ['Segoe UI Emoji']);
PDF.CurrentPage.SetFont('Arial', [], 12);
PDF.CurrentPage.TextOutWithFallback(72, 72, 0, Text);
PDF.CurrentPage.SetFont('Yu Gothic UI', [], 14);
PDF.CurrentPage.TextOutVertical(420, 72, VerticalText);
Missing := PDF.GetUnresolvedGlyphs;