PDFium Delphi Component Docs

модул FPdfTextShapingHb

Модул: FPdfTextShapingHb
HarfBuzz бекенд за оформяне за целите на Free Pascal, свързващ libharfbuzz по време на изпълнение и вземащ шрифтовите байтове от resolver, подаван от хоста

Синтаксис

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 е двойник на Uniscribe бекенда в FPdfTextShaping за целите, които разполагат с usp10.dll. Интерфейсът се компилира само под Free Pascal, защото Delphi целите са Windows, където важи Uniscribe бекендът

Двата бекенда разделят работата по различен начин. Uniscribe разделя на елементи, оформя, поставя и пренарежда в един проход, докато HarfBuzz оформя единичен run, чиято посока и писменост вече са известни. Този модул доставя останалото: FPdfBidi разрешава нивата на вграждане, Unicode писмеността на всеки знак разделя текста на runs, а run-овете се подреждат във визуалния ред, който дава правилото L2 на UAX #9. Знаците с обща, наследена и непозната писменост продължават run-а, в който се намират, така че цифра или интервал не разцепват дума

libharfbuzz се свързва по време на изпълнение чрез DynLibs, така че не е зависимост при компилация, а липсата му се докладва, вместо да бъде фатална. HarfBuzzAvailable отчита дали библиотеката е намерена и необходимите входни точки са разрешени, а HarfBuzzVersionString връща версията на заредената библиотека

Оформителят не търси шрифтове. Uniscribe чете двоичния шрифтов файл от GDI device context, който няма преносим еквивалент, затова хостът подава на Create TPdfFontDataResolver, който съпоставя име на шрифт с TrueType или OpenType байтовете. Така изброяването на шрифтове - fontconfig, CoreText или собствена шрифтова папка на приложението - остава извън модул, който няма работа да определя тази политика

Функции

ФункцияОписание
HarfBuzzAvailableTrue, когато libharfbuzz е намерен и необходимите входни точки са разрешени; първото извикване извършва свързването
HarfBuzzVersionStringВерсия на заредената библиотека като "major.minor.micro", или празен низ, когато библиотеката е недостъпна

Типове

ТипОписание
TPdfFontDataResolverMethod reference, който съпоставя FontName с байтовете на шрифтовия файл в FontData; връщането на False кара оформителя да провали заявката по същия начин, както нечетим GDI шрифт на Windows
EPdfHarfBuzzErrorИзключение, вдигано когато не е конфигуриран resolver, когато libharfbuzz е недостъпен или когато HarfBuzz blob, face, font или buffer не може да бъде създаден
TPdfHarfBuzzTextShaperTPdfTextShaper реализация, поддържана от HarfBuzz, с Create, Destroy и Shape

Членове на TPdfHarfBuzzTextShaper

ЧленОписание
Create(Resolver)Създава оформителя и съхранява TPdfFontDataResolver, който ще използва за всяко търсене на шрифт
DestroyОсвобождава кешираните HarfBuzz face и blob, след което наследения деструктор
Shape(Text, FontName, FontSize, Options, Shaped)Разрешава нивата на вграждане, разделя текста по ниво и писменост, оформя всеки run чрез HarfBuzz и връща run-овете във визуален ред в Shaped; False, когато текстът не произведе глифи

Забележки

Виж също

FPdfTextShaping, TPdf.AddShapedText, TPdf.AddCidType2Text, ConfigureSystemFontProvider