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;
FPdfTextShapingHb, usp10.dll bulunmayan hedefler için FPdfTextShaping içindeki Uniscribe arka ucunun karşılığıdır. Arayüz yalnızca Free Pascal altında derlenir; çünkü Delphi hedefleri Windows'tur ve Uniscribe arka ucu orada geçerlidir
İki arka uç işi farklı biçimde böler. Uniscribe tek geçişte öğelerine ayırır, şekillendirir, yerleştirir ve yeniden sıralar; HarfBuzz ise yönü ve yazı sistemi önceden bilinen tek bir run'ı şekillendirir. Geri kalanını bu birim sağlar: FPdfBidi gömme düzeylerini çözer, her karakterin Unicode yazı sistemi metni run'lara ayırır ve run'lar UAX #9 kuralı L2'nin verdiği görsel sırada dizilir. Common, inherited ve bilinmeyen yazı sistemli karakterler bulundukları run'ı sürdürür; böylece bir rakam ya da boşluk bir kelimeyi bölmez
libharfbuzz, DynLibs üzerinden çalışma zamanında bağlanır; dolayısıyla derleme bağımlılığı değildir ve yokluğu ölümcül değil raporlanabilir bir durumdur. HarfBuzzAvailable kütüphanenin bulunup bulunmadığını ve zorunlu giriş noktalarının çözümlenip çözümlenmediğini raporlar; HarfBuzzVersionString yüklenen kütüphanenin sürümünü döndürür
Şekillendirici yazı tiplerini kendisi aramaz. Uniscribe, yazı tipi ikilisini taşınabilir karşılığı olmayan bir GDI device context'ten okur; bu yüzden ana makine, bir yazı tipi adını TrueType ya da OpenType baytlarına eşleyen bir TPdfFontDataResolver öğesini Create işlevine geçirir. Böylece yazı tipi numaralandırması - fontconfig, CoreText ya da uygulamanın kendi yazı tipi klasörü - bu politikayı belirlemesi gereken bir birimin dışında kalır
| Function | Description |
|---|---|
HarfBuzzAvailable | libharfbuzz bulunduğunda ve zorunlu giriş noktaları çözümlendiğinde True döndürür; ilk çağrı bağlama işlemini gerçekleştirir |
HarfBuzzVersionString | Yüklenen kütüphanenin sürümünü "major.minor.micro" biçiminde döndürür; kütüphane kullanılamıyorsa boş bir dize döndürür |
| Type | Description |
|---|---|
TPdfFontDataResolver | FontName değerini FontData içindeki yazı tipi dosyası baytlarına eşleyen metot referansı; False döndürmek, şekillendiricinin isteği Windows'ta okunamayan bir GDI yazı tipi gibi başarısız kılmasını sağlar |
EPdfHarfBuzzError | Yapılandırılmış bir çözümleyici yokken, libharfbuzz kullanılamazken ya da bir HarfBuzz blob, face, font veya buffer oluşturulamadığında fırlatılan istisna |
TPdfHarfBuzzTextShaper | HarfBuzz tarafından desteklenen TPdfTextShaper uygulaması; Create, Destroy ve Shape üyelerini içerir |
| Member | Description |
|---|---|
Create(Resolver) | Şekillendiriciyi oluşturur ve her yazı tipi aramasında kullanacağı TPdfFontDataResolver öğesini saklar |
Destroy | Önbelleğe alınmış HarfBuzz face ve blob'unu, ardından kalıtsal yıkıcıyı serbest bırakır |
Shape(Text, FontName, FontSize, Options, Shaped) | Gömme düzeylerini çözer, metni düzeye ve yazı sistemine göre run'lara ayırır, her run'ı HarfBuzz üzerinden şekillendirir ve run'ları Shaped içinde görsel sırada döndürür; metin glif üretmiyorsa False döner |
HarfBuzzAvailable çağrısı Windows'ta libharfbuzz-0.dll ve harfbuzz.dll, macOS'ta libharfbuzz.0.dylib ve libharfbuzz.dylib, diğer platformlarda libharfbuzz.so.0 ve libharfbuzz.so dosyalarını yoklarShape, boş metin, boş yazı tipi adı, pozitif olmayan yazı tipi boyutu, geçersiz Options limitleri, MaxCharacters aşan metin, MaxGlyphs aşan glifler veya çözümleyicinin sağlayamadığı yazı tipi verisi için EPdfTextShapingError fırlatırShape, yapılandırılmış bir TPdfFontDataResolver yokken, libharfbuzz kullanılamazken ya da bir HarfBuzz nesnesi oluşturulamadığında EPdfHarfBuzzError fırlatırOptions.MaxRuns ile sınırlıdır ve Options.Direction, ptdLeftToRight ile ptdRightToLeft değerlerini sabit bir paragraf yönüne eşler; diğer her şey otomatik çözümlenirShaped.FontData, çözümleyicinin döndürdüğü baytları taşır; TPdf.AddShapedText bir CID yazı tipi oluşturmak için tam da bunlara ihtiyaç duyar