|
Arabic / Persian / Urdu Shaping Support Producer-side shaping pipeline (v2.85.0 - v2.119.68)
|
OpenType GSUB Engine CFF / OpenType Subsetting |
|
HotPDF chạy pipeline shaping phía producer, chuyển các run Unicode đầu vào tiếng Ả Rập, Ba Tư và Urdu sang Arabic Presentation Forms trong lúc phát văn bản PDF, để trình đọc phía tiêu thụ nhận sẵn các glyph vị trí / ligature có thể render mà không cần một shaper kiểu Harfbuzz riêng
Pipeline làm gì Shaping vị trí (v2.85.0): mỗi chữ cái gốc trong tiếng Ả Rập có tối đa bốn dạng vị trí - isolated (
Ligature bắt buộc LAM-ALEF (v2.119.32): đặc tả Unicode Arabic Shaping yêu cầu mọi LAM (U+0644) theo ngay sau một ALEF (U+0627 dạng thường, U+0622 có madda ở trên, U+0623 có hamza ở trên, U+0625 có hamza ở dưới) phải gộp thành một glyph ligature duy nhất (U+FEFB - U+FEFC các dạng isolated / final với biến thể hamza / madda tương ứng). Đây là một trong số rất ít ligature không thể bỏ qua trong kiểu chữ Ả Rập và là điều kiện để hiển thị đúng; nếu tách chúng thành các glyph riêng, văn bản sẽ lập tức bị trình đọc gốc nhận ra là sai dạng. HotPDF thực hiện phép gộp ngay trong lúc xuất ra nên bên gọi không cần một shaper kiểu Harfbuzz trong luồng mã của mình
9 chữ cái lõi của Persian / Urdu (v2.119.35): Persian và Urdu mở rộng tiếng Ả Rập bằng các chữ không có trong khối Arabic Presentation Forms-B (U+FE70 - U+FEFC). 9 chữ dùng nhiều nhất trong nhóm này - gồm PEH (U+067E), TCHEH (U+0686), JEH (U+0698), KEH (U+06A9 / U+06AF), GAF (U+06AF), NOON GHUNNA (U+06BA), HEH DOACHASHMEE (U+06BE), YEH BARREE (U+06D2), và HEH GOAL (U+06C1) - có dạng trình bày trong Arabic Presentation Forms-A (U+FB50 - U+FDFF). HotPDF giờ ánh xạ các chữ này sang glyph Forms-A thích hợp trong lúc shaping vị trí, nên văn bản Persian và Urdu hiển thị đúng các dạng init / medi / fina / isol trong mọi trình đọc
Arabic Extended-A + Supplement (v2.119.52, v2.119.56): bảng join class giờ bao phủ các ký tự Arabic Extended-A còn lại (ALEF WASLA / NOON GHUNNA / các biến thể HEH), Arabic Supplement U+0750-U+077F, và dải Arabic Extended-A cao hơn U+08A0-U+08FF. Các ký tự có mã hóa Presentation Forms-A tĩnh được ánh xạ qua bộ shaper 4 vị trí hiện có; các ký tự không có ánh xạ đó (phần lớn Extended-A) chỉ nhận phân loại join class để các ký tự lân cận vẫn shaping đúng ngay cả khi chính ký tự đó được truyền qua nguyên vẹn. v2.119.56 đã sửa hai ánh xạ Forms-A sai được đưa vào bởi v2.119.52 (U+06C2 / U+06C3)
Phủ kín Persian / Urdu Form-B (v2.119.57): bảng join class được mở rộng để bao trùm toàn bộ dải U+0672-U+06D5 (khoảng 80 ký tự bao gồm các biến thể REH / DAL / SEEN / SAD / TAH / AIN / FEH / QAF / KAF / GAF / LAM / NOON / HEH / WAW / YEH), đồng thời thêm 26 ánh xạ Presentation Forms-A mới (15 dạng 4-form của lớp D + 11 dạng 2-form của lớp R). Đáng chú ý, HEH DOACHASHMEE chuẩn của Urdu (U+06BE → FBAA-FBAD) và YEH BARREE ở cuối từ của Urdu (U+06D2 → FBAE-FBAF) giờ đã được ánh xạ đúng vào các ô Forms-A từng bị bản sửa tạm ALEF WASLA / NOON GHUNNA ở v2.119.52 sử dụng sai. Mức phủ Forms-A tĩnh giờ bao trùm hơn 40 ký tự nguồn
Hậu xử lý ligature YEH-HAMZA + nguyên âm (v2.119.58): một post-pass thêm vào
Ligature Allah (v2.119.60): chuỗi bốn ký tự ALEF + LAM + LAM + HEH gộp thành U+FDF2 ARABIC LIGATURE ALLAH ISOLATED FORM. Được triển khai như một post-pass tĩnh ở mức codepoint sau LAM-ALEF v2.119.32 và YEH-HAMZA v2.119.58 trong chuỗi
Ligature cụm Bismillah (v2.119.62): cụm Bismillah chuẩn gồm 22 codepoint "بسم الله الرحمن الرحيم" gộp thành một glyph duy nhất U+FDFD ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM. Chạy như pre-pass đầu tiên trong
Public Query Helpers
Cách gọi Pipeline shaping chạy tự động bên trong các method phát văn bản Unicode - không cần một lời gọi riêng kiểu "shape this". Hãy truyền chuỗi Arabic / Persian / Urdu đầu vào Unicode vào THPDFPage.UnicodeTextOut hoặc THPDFPage.RtLTextOut và HotPDF sẽ ánh xạ từng codepoint đầu vào sang dạng trình bày của nó trước khi ghi toán tử hiển thị văn bản PDF. Các byte Unicode gốc cũng được ghi vào
Yêu cầu về font Font được đăng ký qua
Noto Sans Arabic (Latin + Arabic; Forms-A + Forms-B + Arabic Extended-A) Noto Naskh Arabic, Noto Naskh Arabic UI Amiri (Naskh truyền thống, phủ đầy đủ Forms-A + Forms-B) Scheherazade New (SIL, thiết kế cho các ngôn ngữ của thế giới Hồi giáo) Microsoft Arabic Typesetting / Tahoma / Times New Roman (đi kèm Windows, phủ đầy đủ Forms-B; một số font có Forms-A)
Khi font đã đăng ký không có glyph cho một dạng trình bày được suy ra, HotPDF sẽ rơi về codepoint Unicode gốc và xuất nó nguyên trạng; khi đó trình đọc phía tiêu thụ có thể tự shaping tiếp (Acrobat, Foxit) hoặc render
Quy trình thường dùng
PDF.RegisterUnicodeTTF('NotoArab', 'NotoSansArabic-Regular.ttf'); PDF.BeginDoc; PDF.CurrentPage.SetFont('NotoArab', [], 14); PDF.CurrentPage.RtLTextOut(100, 700, 0, UnicodeString(#$0645#$0631#$062D#$0628#$0627)); // "marhaba" (hello) PDF.EndDoc;
Tích hợp pipeline giai đoạn 8 tự động (v2.119.59 - v2.119.68) v2.119.59 giới thiệu property tùy chọn
Khi bật
CMap ToUnicode Adobe-Identity-UCS được xuất bởi
Quan hệ với OpenType GSUB engine Bộ shaper post-pass tĩnh mô tả ở trên (v2.85.0 + v2.119.32 / 58 / 60 / 62) mặc định độc lập với OpenType GSUB engine. Khi bật
Với các substitute glyph không có codepoint Unicode, bên gọi kết hợp
Phạm vi và giới hạn Thuật toán BiDi nằm ngoài trang này: bên gọi vẫn phải tự sắp xếp các run LTR và RTL trộn lẫn hoặc dùng một thư viện BiDi riêng. Hỗ trợ GPOS, Indic/Tibetan/Mongolian, Hebrew, N'Ko, Adlam, Thai/Lao, và Javanese hiện nằm trên các trang cờ shaping và API tùy chọn riêng, nên trang này chỉ tập trung vào shaping tiếng Ả Rập bằng cơ chế tĩnh và GSUB
Xem thêm: OpenType GSUB Substitution Engine, Automatic Shaping Pipeline (Phase 8), Syriac / Mongolian / Devanagari Shaping, THotPDF.AssignSyntheticCodepointForGID, THPDFPage.RtLTextOut, THPDFPage.UnicodeTextOut, CFF / OpenType Font Subsetting |