THotPDF.RegisterAcroFormFont

THotPDF đăng ký đa phông AcroForm /DR (v2.119.42)

 

AddXFAPacket  AcroForm Support  SetFormUnicodeFontDict

Đăng ký thêm một phông Unicode (Type 0 / CID-keyed) để đưa vào từ điển AcroForm Default Resources (/DR). Nhờ vậy, một tài liệu PDF có thể dùng đồng thời nhiều phông Unicode cho các widget AcroForm - thường dùng cho biểu mẫu đa ngôn ngữ cần, chẳng hạn, một phông Latin, một phông CJK và một phông Ả Rập trong cùng một biểu mẫu

 

Cú pháp Delphi:

procedure RegisterAcroFormFont(const FontResourceName: AnsiString;

  FontIndirectRef: THPDFObject);

 

Mô tả

Các widget AcroForm tham chiếu phông thông qua từ điển Default Resources (/DR) trên dict AcroForm, và đây là vùng tài nguyên dùng chung cho mọi luồng hiển thị của trường biểu mẫu. Trước v2.119.42, AcroForm /DR chỉ lộ ra đúng một phông Unicode (thường là phông Type 0 do bộ trợ giúp đăng ký qua SetFormUnicodeFontDict), khiến quy trình biểu mẫu đa ngôn ngữ bị gò bó vì mọi widget đều phải hiển thị bằng cùng một chương trình phông

 

Từ v2.119.42, bên gọi có thể đăng ký thêm các phông Unicode với tên tài nguyên tùy ý. Mỗi phông được đăng ký sẽ trở thành một mục /DR /Font /<name> <indirect ref> bên trong dict /DR của AcroForm tại thời điểm EndDoc. Sau đó, các luồng hiển thị của widget có thể tham chiếu bất kỳ tên nào đã đăng ký thông qua toán tử /Tf <name> <size> riêng của chúng bên trong luồng nội dung hiển thị

 

Tham số

FontResourceName - tên PDF Name mà toán tử /Tf trong luồng hiển thị tham chiếu đến. Quy ước: một định danh ngắn, ổn định, không có dấu gạch chéo đầu (ví dụ 'NotoSansArab', 'NotoSansCJK'). HotPDF sẽ ghi dấu gạch chéo đầu khi tuần tự hóa

FontIndirectRef - một từ điển phông Type 0 (CID-keyed) gián tiếp đã tồn tại, thường là kết quả của CreateIndirectFontDict trên một phông đã đăng ký qua RegisterUnicodeTTF

 

Quy trình điển hình (biểu mẫu đa ngôn ngữ)

 

PDF.RegisterUnicodeTTF('NotoSansArab', 'NotoSansArabic-Regular.ttf');

PDF.RegisterUnicodeTTF('NotoSansJP'  , 'NotoSansJP-Regular.otf');

ArabRef := PDF.CreateIndirectFontDict('NotoSansArab');

JPRef   := PDF.CreateIndirectFontDict('NotoSansJP');

PDF.RegisterAcroFormFont('NotoSansArab', ArabRef);

PDF.RegisterAcroFormFont('NotoSansJP'  , JPRef);

 

Lúc này, các widget chứa nội dung Ả Rập có thể tạo luồng hiển thị với /NotoSansArab 12 Tf trong khi các widget chứa nội dung Nhật dùng /NotoSansJP 12 Tf, cùng chia sẻ một vùng tài nguyên AcroForm /DR dùng chung cho toàn bộ tài liệu

 

Tương thích với SetFormUnicodeFontDict

Bộ trợ giúp một phông sẵn có (SetFormUnicodeFontDict) vẫn hoạt động cho các dự án chỉ cần một phông Unicode trong AcroForm /DR. RegisterAcroFormFont là phần bổ sung: người dùng có thể dùng nó cùng với SetFormUnicodeFontDict, hoặc thay thế hoàn toàn SetFormUnicodeFontDict khi cần nhiều hơn một phông Unicode

 

Xem thêm: THotPDF.SetFormUnicodeFontDict, THotPDF.CreateIndirectFontDict, AcroForm Support, THPDFPage.AddTextField