PDFium Delphi Component Docs

FPdfTextShapingHb jednotka

Jednotka: FPdfTextShapingHb
Tvarovací backend HarfBuzz pro cíle Free Pascal, který váže libharfbuzz za běhu a bere bajty fontu od resolveru dodaného hostitelem

Syntaxe

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;

Popis

FPdfTextShapingHb je protějšek backendu Uniscribe z FPdfTextShaping pro cíle, které nemají usp10.dll. Rozhraní se kompiluje pouze pod Free Pascalem, protože Delphi cílí na Windows, kde platí backend Uniscribe

Oba backendy si práci dělí jinak. Uniscribe segmentuje, tvaruje, umisťuje a přeřazuje v jednom průchodu, zatímco HarfBuzz tvaruje jediný běh, jehož směr a písmo jsou už známé. Zbytek dodává tato jednotka: FPdfBidi vyřeší úrovně vnoření, Unicode písmo každého znaku rozdělí text na běhy a běhy se vyskládají do vizuálního pořadí, které dává pravidlo L2 z UAX #9. Znaky common, inherited a neznámého písma zůstávají v běhu, ve kterém právě jsou, takže číslice ani mezera nerozdělí slovo

libharfbuzz se váže za běhu přes DynLibs, takže není build závislostí a jeho absence se nahlásí místo toho, aby byla fatální. HarfBuzzAvailable hlásí, zda byla knihovna nalezena a požadované vstupní body vyřešeny, a HarfBuzzVersionString vrací verzi nahrané knihovny

Shaper si fonty sám nehledá. Uniscribe čte binární data fontu z GDI device contextu, což nemá přenositelný ekvivalent, takže hostitel předá Create resolver TPdfFontDataResolver, který mapuje název fontu na bajty TrueType nebo OpenType. Vyjmenovávání fontů - fontconfig, CoreText nebo vlastní složka fontů aplikace - tak zůstává mimo jednotku, která do té politiky nic nemá

Funkce

FunctionDescription
HarfBuzzAvailableTrue, když byl libharfbuzz nalezen a požadované vstupní body vyřešeny; první volání provede vazbu
HarfBuzzVersionStringVerze nahrané knihovny jako "major.minor.micro", nebo prázdný řetězec, když knihovna není k dispozici

Typy

TypeDescription
TPdfFontDataResolverMethod reference mapující FontName na bajty souboru fontu v FontData; vrácení False donutí shaper ukončit požadavek jako neúspěšný stejně jako nečitelný GDI font ve Windows
EPdfHarfBuzzErrorVýjimka vyvolaná, když není nakonfigurován žádný resolver, když není libharfbuzz k dispozici, nebo když nelze vytvořit HarfBuzz blob, face, font ani buffer
TPdfHarfBuzzTextShaperImplementace TPdfTextShaper postavená na HarfBuzz, s Create, Destroy a Shape

Členové TPdfHarfBuzzTextShaper

MemberDescription
Create(Resolver)Vytvoří shaper a uloží TPdfFontDataResolver, který použije při každém hledání fontu
DestroyUvolní cachovanou HarfBuzz face a blob, poté zavolá zděděný destruktor
Shape(Text, FontName, FontSize, Options, Shaped)Vyřeší úrovně vnoření, rozdělí text podle úrovně a písma, vytvaruje každý běh přes HarfBuzz a vrátí běhy ve vizuálním pořadí v Shaped; False, když text neposkytne žádné glyfy

Poznámky

Viz také

FPdfTextShaping, TPdf.AddShapedText, TPdf.AddCidType2Text, ConfigureSystemFontProvider