PDFium Delphi Component Docs

FPdfTextShapingHb unit

Unit: FPdfTextShapingHb
Backend shaping HarfBuzz untuk target Free Pascal, mengikat libharfbuzz saat run time dan mengambil byte font dari resolver yang disediakan 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 adalah pasangan dari backend Uniscribe di FPdfTextShaping, untuk target yang tidak memiliki usp10.dll. Antarmukanya hanya dikompilasi di bawah Free Pascal, karena Delphi menargetkan Windows tempat backend Uniscribe berlaku

Kedua backend membagi pekerjaan secara berbeda. Uniscribe mengitemisasi, membentuk, menempatkan, dan mengurutkan ulang dalam satu lintasan, sedangkan HarfBuzz membentuk satu run yang arah dan skripnya sudah diketahui. Unit ini menyediakan sisanya: FPdfBidi menyelesaikan level embedding, skrip Unicode setiap karakter membagi teks menjadi run, dan run-run itu disusun dalam urutan visual yang diberikan aturan L2 UAX #9. Karakter skrip Common, inherited, dan unknown melanjutkan run tempat mereka berada, sehingga digit atau spasi tidak memecah sebuah kata

libharfbuzz diikat saat run time melalui DynLibs, sehingga bukan dependency build dan ketiadaannya dilaporkan alih-alih bersifat fatal. HarfBuzzAvailable melaporkan apakah pustaka ditemukan dan entry point yang disyaratkan ter-resolve, dan HarfBuzzVersionString mengembalikan versi pustaka yang termuat

Shaper ini tidak mencari font. Uniscribe membaca biner font dari GDI device context, yang tidak punya padanan portabel, sehingga host meneruskan sebuah TPdfFontDataResolver ke Create yang memetakan nama font ke byte TrueType atau OpenType. Dengan begitu, enumerasi font - fontconfig, CoreText, atau folder font milik aplikasi sendiri - tetap berada di luar unit yang bukan tempatnya menentukan kebijakan itu

Functions

FunctionDescription
HarfBuzzAvailableTrue ketika libharfbuzz ditemukan dan entry point yang disyaratkan ter-resolve; pemanggilan pertama melakukan binding
HarfBuzzVersionStringVersi pustaka yang termuat dalam bentuk "major.minor.micro", atau string kosong ketika pustaka tidak tersedia

Types

TypeDescription
TPdfFontDataResolverMethod reference yang memetakan FontName ke byte berkas font dalam FontData; mengembalikan False membuat shaper menggagalkan request dengan cara yang sama seperti font GDI yang tidak terbaca di Windows
EPdfHarfBuzzErrorException yang dimunculkan ketika tidak ada resolver yang dikonfigurasi, ketika libharfbuzz tidak tersedia, atau ketika blob, face, font, atau buffer HarfBuzz tidak dapat dibuat
TPdfHarfBuzzTextShaperImplementasi TPdfTextShaper yang didukung HarfBuzz, dengan Create, Destroy, dan Shape

Members of TPdfHarfBuzzTextShaper

MemberDescription
Create(Resolver)Membuat shaper dan menyimpan TPdfFontDataResolver yang akan dipakai untuk setiap pencarian font
DestroyMelepas face dan blob HarfBuzz yang di-cache, lalu destructor turunannya
Shape(Text, FontName, FontSize, Options, Shaped)Menyelesaikan level embedding, membagi teks berdasarkan level dan skrip, membentuk setiap run melalui HarfBuzz, lalu mengembalikan run dalam urutan visual di Shaped; False ketika teks tidak menghasilkan glyph

Remarks

See Also

FPdfTextShaping, TPdf.AddShapedText, TPdf.AddCidType2Text, ConfigureSystemFontProvider