PDFium Delphi Component Docs

FPdfTextShapingHb Unità

Unità: FPdfTextShapingHb
Backend di shaping HarfBuzz per i target Free Pascal, che carica libharfbuzz a runtime e prende i byte dei font da un resolver fornito dall'host

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 è la controparte del backend Uniscribe in FPdfTextShaping, per i target che non hanno usp10.dll. L'interfaccia viene compilata solo sotto Free Pascal, perché Delphi punta a Windows, dove si applica il backend Uniscribe

I due backend dividono il lavoro in modo diverso. Uniscribe scompone in item, modella, posiziona e riordina in un solo passaggio, mentre HarfBuzz modella una singola run la cui direzione e la cui scrittura sono già note. Questa unità fornisce il resto: FPdfBidi risolve i livelli di incorporamento, la scrittura Unicode di ogni carattere segmenta il testo in run, e le run vengono disposte nell'ordine visivo che la regola L2 di UAX #9 fornisce. I caratteri di scrittura common, inherited e sconosciuta proseguono la run in cui si trovano, così una cifra o uno spazio non spezza una parola

libharfbuzz viene caricato a runtime tramite DynLibs, quindi non è una dipendenza di build e la sua assenza viene riportata anziché essere fatale. HarfBuzzAvailable riporta se la libreria è stata trovata e gli entry point richiesti risolti, e HarfBuzzVersionString restituisce la versione della libreria caricata

Lo shaper non cerca i font. Uniscribe legge il binario del font da un device context GDI, che non ha equivalenti portabili, quindi l'host passa a Create un TPdfFontDataResolver che mappa un nome di font nei byte TrueType o OpenType. Questo tiene l'enumerazione dei font - fontconfig, CoreText, o la cartella font di un'applicazione - fuori da un'unità che non ha alcun motivo di stabilire quella politica

Functions

FunctionDescription
HarfBuzzAvailableTrue quando libharfbuzz è stato trovato e gli entry point richiesti sono stati risolti; la prima chiamata esegue il binding
HarfBuzzVersionStringVersione della libreria caricata come "major.minor.micro", o una stringa vuota quando la libreria non è disponibile

Types

TypeDescription
TPdfFontDataResolverRiferimento a metodo che mappa FontName nei byte del file di font in FontData; restituire False fa fallire la richiesta dello shaper nello stesso modo in cui lo fa un font GDI illeggibile su Windows
EPdfHarfBuzzErrorEccezione sollevata quando nessun resolver è configurato, quando libharfbuzz non è disponibile, o quando un blob, una face, un font o un buffer HarfBuzz non può essere creato
TPdfHarfBuzzTextShaperImplementazione TPdfTextShaper basata su HarfBuzz, con Create, Destroy e Shape

Members of TPdfHarfBuzzTextShaper

MemberDescription
Create(Resolver)Crea lo shaper e memorizza il TPdfFontDataResolver che userà per ogni ricerca di font
DestroyRilascia la face e il blob HarfBuzz in cache, poi il distruttore ereditato
Shape(Text, FontName, FontSize, Options, Shaped)Risolve i livelli di incorporamento, segmenta il testo per livello e scrittura, modella ogni run tramite HarfBuzz, e restituisce le run in ordine visivo in Shaped; False quando il testo non produce glyph

Remarks

See Also

FPdfTextShaping, TPdf.AddShapedText, TPdf.AddCidType2Text, ConfigureSystemFontProvider