PDFium Delphi Component Docs

FPdfTextShapingHb-enhet

Unit: FPdfTextShapingHb
HarfBuzz-formningsbackend för Free Pascal-mål, som binder libharfbuzz vid körning och hämtar typsnittsbytena från en resolver som värden tillhandahåller

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 är motparten till Uniscribe-backenden i FPdfTextShaping, för mål som saknar usp10.dll. Gränssnittet kompileras endast under Free Pascal, eftersom Delphi riktar sig mot Windows där Uniscribe-backenden gäller

De två backenderna delar upp arbetet olika. Uniscribe itemiserar, formar, placerar och omordnar i ett pass, medan HarfBuzz formar ett enskilt run vars riktning och skrift redan är känd. Denna enhet tillhandahåller resten: FPdfBidi löser ut inbäddningsnivåerna, varje teckens Unicode-skrift segmenterar texten till runs, och runs läggs ut i den visuella ordning UAX #9-regeln L2 ger. Gemensamma, ärvda och okända skrifttecken fortsätter run de befinner sig i, så en siffra eller ett blanksteg delar inte upp ett ord

libharfbuzz binds vid körning via DynLibs, så det är inget byggberoende och dess frånvaro rapporteras i stället för att vara ödesdiger. HarfBuzzAvailable rapporterar huruvida biblioteket hittades och de nödvändiga ingångspunkterna löstes upp, och HarfBuzzVersionString returnerar det inlästa bibliotekets version

Formnaren slår inte upp typsnitt själv. Uniscribe läser typsnittsbinären ur en GDI-enhetkontext, vilket saknar portabel motsvarighet, så värden skickar en TPdfFontDataResolver till Create som mappar ett typsnittsnamn till TrueType- eller OpenType-bytena. Det håller typsnittsuppräkning - fontconfig, CoreText eller en applikations egen typsnittsmapp - utanför en enhet som inte har någon som helst sak i den policyn

Functions

FunctionDescription
HarfBuzzAvailableTrue när libharfbuzz hittades och de nödvändiga ingångspunkterna löstes upp; första anropet utför bindningen
HarfBuzzVersionStringVersion av det inlästa biblioteket som "major.minor.micro", eller en tom sträng när biblioteket inte är tillgängligt

Types

TypeDescription
TPdfFontDataResolverMetodreferens som mappar FontName till typsnittsfilens byten i FontData; att returnera False låter formnaren misslyckas med begäran på samma sätt som ett oläsbart GDI-typsnitt gör på Windows
EPdfHarfBuzzErrorUndantag som kastas när ingen resolver är konfigurerad, när libharfbuzz inte är tillgängligt eller när en HarfBuzz-blob, face, typsnitt eller buffert inte kan skapas
TPdfHarfBuzzTextShaperTPdfTextShaper-implementering byggd på HarfBuzz, med Create, Destroy och Shape

Members of TPdfHarfBuzzTextShaper

MemberDescription
Create(Resolver)Skapar formnaren och sparar den TPdfFontDataResolver den ska använda för varje typsnittsuppslag
DestroyFrigör den cachade HarfBuzz-facen och bloben, därefter den ärvda destruktorn
Shape(Text, FontName, FontSize, Options, Shaped)Löser ut inbäddningsnivåerna, segmenterar texten efter nivå och skrift, formar varje run via HarfBuzz och returnerar runs i visuell ordning i Shaped; False när texten inte ger några glyfer

Remarks

See Also

FPdfTextShaping, TPdf.AddShapedText, TPdf.AddCidType2Text, ConfigureSystemFontProvider