PDFium Component Docs

FPdfTextShapingHb-enhet

Unit: FPdfTextShapingHb
HarfBuzz-shaping-backend for Free Pascal-mål, som binder libharfbuzz ved kjøretid og henter fontbytene fra en oppløser levert av verten

Syntax

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;

Description

FPdfTextShapingHb er motstykket til Uniscribe-backend-en i FPdfTextShaping, for mål som ikke har usp10.dll. Grensesnittet kompileres bare under Free Pascal, fordi Delphi retter seg mot Windows, der Uniscribe-backend-en gjelder

De to backend-ene deler arbeidet forskjellig. Uniscribe segmenterer, formerer, plasserer og stokker om i én gjennomgang, mens HarfBuzz formerer én enkelt run med allerede kjent retning og skrift. Denne uniten leverer resten: FPdfBidi løser innbindingsnivåene, Unicode-skriptet til hvert tegn deler teksten inn i runs, og runene legges ut i den visuelle rekkefølgen UAX #9-regel L2 gir. Tegn med vanlig, arvet og ukjent skript fortsetter runen de står i, så et siffer eller et mellomrom deler ikke et ord

libharfbuzz bindes ved kjøretid gjennom DynLibs, så det er ikke en byggeavhengighet, og fraværet rapporteres i stedet for å være fatalt. HarfBuzzAvailable rapporterer om biblioteket ble funnet og de nødvendige inngangspunktene løst, og HarfBuzzVersionString returnerer versjonen til det lastede biblioteket

Shaperen slår ikke opp fonter selv. Uniscribe leser fontens binærdata ut av en GDI-enhetskontekst, som ikke har noen portabel motpart, så verten sender en TPdfFontDataResolver til Create som avbilder et fontnavn til TrueType- eller OpenType-bytene. Det holder fontoppramsing - fontconfig, CoreText eller programmets egen fontmappe - utenfor en unit som ikke har noe å gjøre med å fastsette den policyen

Functions

FunctionDescription
HarfBuzzAvailableTrue når libharfbuzz ble funnet og de nødvendige inngangspunktene var løst; det første kallet utfører bindingen
HarfBuzzVersionStringVersjonen av det lastede biblioteket som "major.minor.micro", eller en tom streng når biblioteket ikke er tilgjengelig

Types

TypeDescription
TPdfFontDataResolverMetodereferanse som avbilder FontName til fontfilbytene i FontData; False gjør at shaperen feiler forespørselen på samme måte som en ulesebar GDI-font på Windows
EPdfHarfBuzzErrorUnntak som utløses når ingen oppløser er konfigurert, når libharfbuzz ikke er tilgjengelig, eller når en HarfBuzz blob, face, font eller buffer ikke kan opprettes
TPdfHarfBuzzTextShaperTPdfTextShaper-implementasjon med HarfBuzz i bunn, med Create, Destroy og Shape

Members of TPdfHarfBuzzTextShaper

MemberDescription
Create(Resolver)Oppretter shaperen og lagrer TPdfFontDataResolver-en den bruker ved hvert fontoppslag
DestroyFrigjør den bufrede HarfBuzz-face-en og blob-en, og deretter den arvede destruktoren
Shape(Text, FontName, FontSize, Options, Shaped)Løser innbindingsnivåene, deler teksten etter nivå og skript, formerer hver run gjennom HarfBuzz og returnerer runene i visuell rekkefølge i Shaped; False når teksten ikke gir noen glyffer

Remarks

See Also

FPdfTextShaping, TPdf.AddShapedText, TPdf.AddCidType2Text, ConfigureSystemFontProvider