PDFium Delphi Component Docs

FPdfTextShapingHb jednotka

Unit: FPdfTextShapingHb
Backend tvarovania HarfBuzz pre ciele Free Pascal, ktorý viaže libharfbuzz za behu a bajty fontov berie z resolvera dodávaného hostiteľom

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 je náprotivok backendu Uniscribe v FPdfTextShaping pre ciele bez usp10.dll. Rozhranie sa kompiluje len pod Free Pascal, pretože Delphi cieli Windows, kde sa uplatňuje backend Uniscribe

Oba backendy si rozdeľujú prácu inak. Uniscribe rozčlení, vytvaruje, umiestni a preusporiada v jednom prechode, zatiaľ čo HarfBuzz tvaruje jediný beh, ktorého smer a písmo sú už známe. Táto jednotka dodáva zvyšok: FPdfBidi vyrieši úrovne zapustenia, skript Unicode každého znaku rozsegmentuje text na behy a behy sa rozložia do vizuálneho poradia, ktoré dáva pravidlo L2 z UAX #9. Znaky so skriptom Common, Inherited a neznámym pokračujú v behu, v ktorom sa nachádzajú, takže číslica ani medzera nerozdelí slovo

libharfbuzz sa viaže za behu cez DynLibs, takže nie je buildovou závislosťou a jeho neprítomnosť sa nahlási namiesto fatálneho zlyhania. HarfBuzzAvailable oznamuje, či bola knižnica nájdená a či sa rozpoznali požadované vstupné body, a HarfBuzzVersionString vráti verziu načítanej knižnice

Tvarovač si fonty nevyhľadáva. Uniscribe číta binárny font z GDI device contextu, čo nemá prenosný ekvivalent, takže hostiteľ odovzdá do Create TPdfFontDataResolver, ktorý mapuje názov fontu na bajty TrueType alebo OpenType. Výber fontov - fontconfig, CoreText alebo vlastný priečinok fontov aplikácie - tak zostáva mimo jednotky, ktorá nemá čo rozhodovať o tejto politike

Functions

FunctionDescription
HarfBuzzAvailableTrue, keď sa našla libharfbuzz a rozpoznali sa požadované vstupné body; prvé volanie vykoná viazanie
HarfBuzzVersionStringVerzia načítanej knižnice ako "major.minor.micro", alebo prázdny reťazec, keď knižnica nie je dostupná

Types

TypeDescription
TPdfFontDataResolverReferencia na metódu, ktorá mapuje FontName na bajty súboru fontu v FontData; vrátenie False spôsobí, že tvarovač zamietne požiadavku rovnakým spôsobom ako nečitateľný GDI font na Windows
EPdfHarfBuzzErrorVýnimka vyvolaná, keď nie je nakonfigurovaný žiadny resolver, keď libharfbuzz nie je dostupné, alebo keď nemožno vytvoriť blob, face, font či buffer HarfBuzz
TPdfHarfBuzzTextShaperImplementácia TPdfTextShaper postavená na HarfBuzz s Create, Destroy a Shape

Members of TPdfHarfBuzzTextShaper

MemberDescription
Create(Resolver)Vytvorí tvarovač a uloží TPdfFontDataResolver, ktorý použije pri každom vyhľadaní fontu
DestroyUvoľní cache face a blob HarfBuzz, potom zdedený deštruktor
Shape(Text, FontName, FontSize, Options, Shaped)Vyrieši úrovne zapustenia, rozsegmentuje text podľa úrovne a skriptu, vytvaruje každý beh cez HarfBuzz a vráti behy vo vizuálnom poradí v Shaped; False, keď text neposkytne žiadne glyfy

Remarks

See Also

FPdfTextShaping, TPdf.AddShapedText, TPdf.AddCidType2Text, ConfigureSystemFontProvider