|
Đă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
|