PDFium Delphi Component Docs

FPdfTextShapingHb واحد

واحد: FPdfTextShapingHb
پس‌پایانهٔ شکل‌دهی HarfBuzz برای هدف‌های Free Pascal که libharfbuzz را در زمان اجرا مقید می‌کند و بایت‌های فونت را از یک resolver فراهم‌شده از سوی میزبان می‌گیرد

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 همتای پس‌پایانهٔ Uniscribe در FPdfTextShaping برای هدف‌هایی است که usp10.dll ندارند. این واحد فقط زیر Free Pascal کامپایل می‌شود، چون Delphi روی ویندوز هدف می‌گیرد و همان‌جاست که پس‌پایانهٔ Uniscribe اعمال می‌شود

این دو پس‌پایانه کار را طور متفاوتی تقسیم می‌کنند. Uniscribe در یک گذر بخش‌بندی، شکل‌دهی، جای‌گذاری و مرتب‌سازی می‌کند، در حالی که HarfBuzz یک ران منفرد را شکل می‌دهد که جهت و خط آن از پیش معلوم است. باقی کار با این واحد است: FPdfBidi سطوح درون‌سازی را حل می‌کند، خط Unicode هر نویسه متن را به ران‌ها تقسیم می‌کند و ران‌ها به ترتیب بصری چیده می‌شوند که قاعدهٔ L2 از UAX #9 می‌سازد. نویسه‌های با خط Common، Inherited و ناشناخته در ران فعلی خود ادامه می‌یابند، پس یک رقم یا یک فاصله کلمه را نمی‌شکند

libharfbuzz از طریق DynLibs در زمان اجرا مقید می‌شود، پس وابستگیِ بیلد نیست و نبودش گزارش می‌شود نه آنکه مهلک باشد. HarfBuzzAvailable گزارش می‌دهد آیا کتابخانه پیدا شده و نقاط ورود لازم تفکیک شده‌اند، و HarfBuzzVersionString نسخهٔ کتابخانهٔ بارگذاری‌شده را برمی‌گرداند

شکل‌دهنده خودش دنبال فونت نمی‌گردد. Uniscribe باینری فونت را از یک GDI device context می‌خواند که معادل قابل‌حملی ندارد، پس میزبان یک TPdfFontDataResolver به Create می‌دهد که نام فونت را به بایت‌های TrueType یا OpenType نگاشت می‌کند. این‌طور فهرست‌کردن فونت‌ها - fontconfig، CoreText یا پوشهٔ فونت خودِ برنامه - بیرون از واحدی می‌ماند که چنین سیاستی اصلاً به آن مربوط نیست

Functions

FunctionDescription
HarfBuzzAvailableTrue وقتی libharfbuzz پیدا شده و نقاط ورود لازم تفکیک شده باشند؛ نخستین فراخوانی، مقیدسازی را انجام می‌دهد
HarfBuzzVersionStringنسخهٔ کتابخانهٔ بارگذاری‌شده به صورت "major.minor.micro"، یا رشتهٔ خالی وقتی کتابخانه در دسترس نباشد

Types

TypeDescription
TPdfFontDataResolverارجاع متدی که FontName را به بایت‌های فایل فونت در FontData نگاشت می‌کند؛ برگرداندن False درخواست را شکست می‌دهد، درست مثل وقتی در ویندوز فونت GDI خواندنی نباشد
EPdfHarfBuzzErrorاستثنایی که وقتی هیچ resolverای پیکربندی نشده، وقتی libharfbuzz در دسترس نیست یا وقتی نمی‌توان blob، face، فونت یا بافر HarfBuzz را ساخت برپا می‌شود
TPdfHarfBuzzTextShaperپیاده‌سازی TPdfTextShaper بر پایهٔ HarfBuzz، همراه با Create، Destroy و Shape

Members of TPdfHarfBuzzTextShaper

MemberDescription
Create(Resolver)شکل‌دهنده را می‌سازد و TPdfFontDataResolverای را که برای هر جست‌وجوی فونت به کار می‌رود ذخیره می‌کند
Destroyface و blob کش‌شدهٔ HarfBuzz را آزاد می‌کند و سپس destructor به‌ارث‌رسیده اجرا می‌شود
Shape(Text, FontName, FontSize, Options, Shaped)سطوح درون‌سازی را حل می‌کند، متن را بر اساس سطح و خط بخش‌بندی می‌کند، هر ران را از طریق HarfBuzz شکل می‌دهد و ران‌ها را به ترتیب بصری در Shaped برمی‌گرداند؛ False وقتی متن هیچ گلیفی تولید نکند

Remarks

See Also

FPdfTextShaping, TPdf.AddShapedText, TPdf.AddCidType2Text, ConfigureSystemFontProvider