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 on FPdfTextShaping-yksikön Uniscribe-backendin vastine kohteille, joissa ei ole usp10.dll-kirjastoa. Rajapinta käännetään vain Free Pascal -kohteille, koska Delphi tähtää Windowsiin, jossa Uniscribe-backend on voimassa
Kaksi backendiä jakavat työn eri tavoin. Uniscribe erittelee, muotoilee, sijoittelee ja järjestää uudelleen yhdellä läpiviennillä, kun taas HarfBuzz muotoilee yhden runin, jonka suunta ja kirjoitusjärjestelmä ovat jo tiedossa. Tämä yksikkö hoitaa loput: FPdfBidi ratkaisee upotustasot, jokaisen merkin Unicode-kirjoitusjärjestelmä jakaa tekstin runeihin, ja runit asetellaan visuaaliseen järjestykseen, jonka UAX #9 -sääntö L2 määrää. Common-, inherited- ja unknown-kirjoitusjärjestelmän merkit jatkavat runia, jossa ovat, joten numero tai välilyönti ei katkaise sanaa
libharfbuzz sidotaan ajon aikana DynLibs-kautta, joten se ei ole käännösaikainen riippuvuus, ja sen puuttuminen ilmoitetaan eikä se kaada ohjelmaa. HarfBuzzAvailable kertoo, löytyikö kirjasto ja ratkesivatko vaaditut entry pointit, ja HarfBuzzVersionString palauttaa ladatun kirjaston version
Muotoilija ei etsi fontteja itse. Uniscribe lukee fontin binaaritiedoston GDI-laitekontekstista, jolla ei ole kannettavaa vastinta, joten isäntä välittää Create-konstruktorille TPdfFontDataResolver-kutsun, joka mapaa fontin nimen TrueType- tai OpenType-tavuiksi. Näin fonttiluettelointi - fontconfig, CoreText tai sovelluksen oma fonttikansio - pysyy ulkopuolella yksikköä, jolla ei ole asiaa päättää kyseisestä käytännöstä
| Function | Description |
|---|---|
HarfBuzzAvailable | Palauttaa arvon True, kun libharfbuzz löytyi ja vaaditut entry pointit ratkesivat; ensimmäinen kutsu suorittaa sidonnan |
HarfBuzzVersionString | Ladatun kirjaston versio muodossa "major.minor.micro" tai tyhjä merkkijono, kun kirjasto ei ole käytettävissä |
| Type | Description |
|---|---|
TPdfFontDataResolver | Metodiviittaus, joka mapaa FontName-nimen fonttitiedoston tavuihin FontData-kenttään; False-paluu saa muotoilijan hylkäämään pyynnön samaan tapaan kuin lukukelvoton GDI-fontti Windowsissa |
EPdfHarfBuzzError | Poikkeus, joka nousee, kun ratkaisijaa ei ole määritetty, kun libharfbuzz ei ole käytettävissä tai kun HarfBuzz blob-, face-, font- tai buffer-objektia ei voi luoda |
TPdfHarfBuzzTextShaper | HarfBuzz-pohjainen TPdfTextShaper-toteutus, jolla on Create-, Destroy- ja Shape-jäsenet |
| Member | Description |
|---|---|
Create(Resolver) | Luo muotoilijan ja tallentaa TPdfFontDataResolver-kutsun, jota se käyttää jokaisessa fonttihaussa |
Destroy | Vapauttaa välimuistissa olevat HarfBuzz face- ja blob-objektit ja kutsuu sitten perittyä destruktoria |
Shape(Text, FontName, FontSize, Options, Shaped) | Ratkaisee upotustasot, jakaa tekstin tason ja kirjoitusjärjestelmän mukaan, muotoilee jokaisen runin HarfBuzzin kautta ja palauttaa runit visuaalisessa järjestyksessä Shaped-tietueeseen; palauttaa arvon False, kun teksti ei tuota glyyfejä |
HarfBuzzAvailable-kutsu etsii tiedostoja libharfbuzz-0.dll ja harfbuzz.dll Windowsissa, libharfbuzz.0.dylib ja libharfbuzz.dylib macOS:ssä sekä libharfbuzz.so.0 ja libharfbuzz.so muuallaShape nostaa EPdfTextShapingError-poikkeuksen, jos teksti on tyhjä, fontin nimi on tyhjä, fontin koko ei ole positiivinen, Options-rajat ovat virheellisiä, teksti ylittää MaxCharacters-rajan, glyyfit ylittävät MaxGlyphs-rajan tai ratkaisija ei pystynyt toimittamaan fonttidataaShape nostaa EPdfHarfBuzzError-poikkeuksen, kun TPdfFontDataResolver-ratkaisijaa ei ole määritetty, kun libharfbuzz ei ole käytettävissä tai kun HarfBuzz-objektia ei voi luodaOptions.MaxRuns, ja Options.Direction mapaa arvot ptdLeftToRight ja ptdRightToLeft kiinteään kappaleen suuntaan, muuten suunta ratkaistaan automaattisestiShaped.FontData sisältää ratkaisijan palauttamat tavut, joita TPdf.AddShapedText tarvitsee CID-fontin rakentamiseen