TPdfFontDataResolver = function(const FontName: WideString;
out FontData: TBytes): Boolean of object;
EPdfHarfBuzzError = class(Exception);
TPdfHarfBuzzTextShaper = class(TPdfTextShaper)
constructor Create(const Resolver: TPdfFontDataResolver);
destructor Destroy; override;
function Shape(const Text, FontName: WideString; FontSize: Single;
const Options: TPdfTextShapingOptions;
out Shaped: TPdfShapedText): Boolean; override;
end;
function HarfBuzzAvailable: Boolean;
function HarfBuzzVersionString: string;
FPdfTextShapingHb je nasprotje zaledja Uniscribe v FPdfTextShaping za tarče brez usp10.dll. Vmesnik se prevede samo pod Free Pascal, ker Delphi cilja Windows, kjer velja zaledje Uniscribe
Zaledji si delo razdelita drugače. Uniscribe razčleni, oblikuje, umesti in prereže v enem prehodu, HarfBuzz pa oblikuje en sam tek, katerega smer in pisava sta že znani. Za preostanek poskrbi ta enota: FPdfBidi razreši ravni vdelave, pisava Unicode posameznega znaka razdeli besedilo na teke, teki pa se razporedijo v vizualnem vrstnem redu, ki ga daje pravilo L2 iz UAX #9. Znaki splošnih, podedovanih in neznanih pisav nadaljujejo tek, v katerem so, tako da številka ali presledek ne razbije besede
libharfbuzz se poveže med izvajanjem prek DynLibs, zato ni odvisnost prevajanja, njegova odsotnost pa se prijavi namesto da bi bila usodna. HarfBuzzAvailable poroča, ali je bila knjižnica najdena in ali so bile zahtevane vstopne točke razrešene, HarfBuzzVersionString pa vrne različico naložene knjižnice
Oblikovalec sam ne išče pisav. Uniscribe prebere binarno vsebino pisave iz GDI konteksta naprave, za kar ni prenosljivega ekvivalenta, zato gostitelj v Create poda TPdfFontDataResolver, ki preslika ime pisave na bajte TrueType ali OpenType. Tako naštevanje pisav - fontconfig, CoreText ali lastna mapa pisav aplikacije - ostane zunaj enote, ki za tako politiko ni pravo mesto
| Function | Description |
|---|---|
HarfBuzzAvailable | True, ko je bil libharfbuzz najden in so bile zahtevane vstopne točke razrešene; prvi klic izvede povezavo |
HarfBuzzVersionString | Različica naložene knjižnice v obliki "major.minor.micro", ali prazen niz, kadar knjižnica ni na voljo |
| Type | Description |
|---|---|
TPdfFontDataResolver | Referenca metode, ki preslika FontName na bajte datoteke pisave v FontData; vračanje False spodleti zahtevo oblikovalca na enak način, kot to stori neberljiva pisava GDI v sistemu Windows |
EPdfHarfBuzzError | Izjema, sprožena, ko ni nastavljen noben razreševalnik, ko libharfbuzz ni na voljo ali ko objekta HarfBuzz blob, face, font ali medpomnilnika ni mogoče ustvariti |
TPdfHarfBuzzTextShaper | Izvedba TPdfTextShaper na osnovi HarfBuzz, s Create, Destroy in Shape |
| Member | Description |
|---|---|
Create(Resolver) | Ustvari oblikovalca in shrani TPdfFontDataResolver, ki ga bo uporabljal pri vsakem iskanju pisave |
Destroy | Sprosti predpomnjeni face in blob HarfBuzz, nato še podedovani destruktor |
Shape(Text, FontName, FontSize, Options, Shaped) | Razreši ravni vdelave, razdeli besedilo po ravneh in pisavah, vsak tek oblikuje prek HarfBuzz in vrne teke v vizualnem vrstnem redu v Shaped; False, ko besedilo ne proizvede nobenega glifa |
HarfBuzzAvailable preveri libharfbuzz-0.dll in harfbuzz.dll v sistemu Windows, libharfbuzz.0.dylib in libharfbuzz.dylib v macOS ter libharfbuzz.so.0 in libharfbuzz.so drugjeShape sproži EPdfTextShapingError za prazno besedilo, prazno ime pisave, nepozitivno velikost pisave, neveljavne meje Options, besedilo nad MaxCharacters, glife nad MaxGlyphs ali podatke pisave, ki jih razreševalnik ni mogel priskrbetiShape sproži EPdfHarfBuzzError, ko ni nastavljen noben TPdfFontDataResolver, ko libharfbuzz ni na voljo ali ko objekta HarfBuzz ni mogoče ustvaritiOptions.MaxRuns, Options.Direction pa preslika ptdLeftToRight in ptdRightToLeft na fiksno smer odstavka, vse drugo pa se razreši samodejnoShaped.FontData hrani bajte, ki jih je vrnil razreševalnik, kar je tisto, česar TPdf.AddShapedText potrebuje za izgradnjo pisave CID