PDFium Delphi Component Docs

FPdfTextShapingHb enhed

Enhed: FPdfTextShapingHb
HarfBuzz-shaping-backend til Free Pascal-mål, der binder libharfbuzz ved run time og henter fontbytes fra en resolver, som hosten leverer

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 modstykket til Uniscribe-backenden i FPdfTextShaping og henvender sig til mål, der ikke har usp10.dll. Interfacet kompileres kun under Free Pascal, fordi Delphi sigter mod Windows, hvor Uniscribe-backenden gælder

De to backends deler arbejdet forskelligt. Uniscribe opdeler, former, placerer og sorterer visuelt i ét hug, mens HarfBuzz former ét run ad gangen, hvis retning og script allerede er kendt. Denne enhed leverer resten: FPdfBidi opløser indlejringsniveauerne, Unicode-scriptet for hvert tegn opdeler teksten i runs, og runene lægges i den visuelle rækkefølge, som UAX #9-regel L2 giver. Fælles, nedarvede og ukendte script-tegn fortsætter det run, de er i, så et ciffer eller et mellemrum ikke deler et ord

libharfbuzz bindes ved run time via DynLibs, så det ikke er en build-afhængighed, og fraværet rapporteres i stedet for at være fatalt. HarfBuzzAvailable rapporterer, om biblioteket blev fundet, og de påkrævede entry points blev opløst, og HarfBuzzVersionString returnerer versionen af det indlæste bibliotek

Shaperen slår ikke fonts op på egen hånd. Uniscribe læser fontens binære data ud af en GDI-device-kontekst, som ikke har nogen portabel pendant, så hosten giver en TPdfFontDataResolver til Create, der oversætter et fontnavn til TrueType- eller OpenType-bytes. Det holder fontopslag - fontconfig, CoreText eller applikationens egen fontmappe - uden for en enhed, der ikke har noget at gøre med den politik

Functions

FunctionDescription
HarfBuzzAvailableTrue, når libharfbuzz blev fundet, og de påkrævede entry points blev opløst; det første kald udfører bindingen
HarfBuzzVersionStringVersion af det indlæste bibliotek som "major.minor.micro" eller en tom streng, når biblioteket ikke er tilgængeligt

Types

TypeDescription
TPdfFontDataResolverMethod-reference, der oversætter FontName til fontfilbytes i FontData; returnering af False får shaperen til at afvise kaldet på samme måde, som en ulæselig GDI-font gør det på Windows
EPdfHarfBuzzErrorException, der udløses, når ingen resolver er konfigureret, når libharfbuzz ikke er tilgængelig, eller når en HarfBuzz-blob, face, font eller buffer ikke kan oprettes
TPdfHarfBuzzTextShaperTPdfTextShaper-implementering med HarfBuzz i ryggen, med Create, Destroy og Shape

Members of TPdfHarfBuzzTextShaper

MemberDescription
Create(Resolver)Opretter shaperen og gemmer den TPdfFontDataResolver, den bruger ved hvert fontopslag
DestroyFrigiver den cachede HarfBuzz-face og -blob og derefter den nedarvede destruktor
Shape(Text, FontName, FontSize, Options, Shaped)Opløser indlejringsniveauerne, opdeler teksten efter niveau og script, former hvert run gennem HarfBuzz og returnerer runene i visuel rækkefølge i Shaped; False, når teksten ikke giver nogen glyffer

Remarks

See Also

FPdfTextShaping, TPdf.AddShapedText, TPdf.AddCidType2Text, ConfigureSystemFontProvider