|
Підтримка формування арабської, перської та урду писемності Конвеєр формування на стороні генератора (v2.85.0 - v2.119.68)
|
OpenType GSUB Engine CFF / OpenType Subsetting |
|
HotPDF запускає конвеєр формування на стороні генератора, який згортає вхідні символи Unicode для арабської, перської мов та урду в їхні презентаційні форми під час виведення тексту PDF, завдяки чому переглядачі отримують готові до рендерингу позиційні гліфи та гліфи лігатур без потреби у власному формувачі класу Harfbuzz
Що робить конвеєр Позиційне формування (v2.85.0): кожна арабська базова літера має до чотирьох позиційних форм - ізольовану (
Обов'язкова лігатура LAM-ALEF (v2.119.32): специфікація арабського формування Unicode вимагає, щоб будь-кий LAM (U+0644), за яким безпосередньо слідує ALEF (U+0627 звичайний, U+0622 з маддою вгорі, U+0623 з хамзою вгорі, U+0625 з хамзою внизу), згортався в один гліф лігатури (U+FEFB - U+FEFC ізольовані / кінцеві форми з відповідними варіантами хамзи / мадди). Це одна з небагатьох обов'язкових лігатур в арабській типографіці, яка є необхідною для коректності; їх рендеринг як окремих гліфів створює текст, який носії мови відразу розпізнають як неправильний. HotPDF виконує згортання під час виведення, тому викликаючому коду не потрібен формувач класу Harfbuzz у власному коді
Основні 9 літер перської мови / урду (v2.119.35): перська мова та урду розширюють арабську літерами, яких немає в блоці Arabic Presentation Forms-B (U+FE70 - U+FEFC). 9 найбільш використовуваних таких літер - включаючи 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) та HEH GOAL (U+06C1) - мають презентаційні форми в блоці Arabic Presentation Forms-A (U+FB50 - U+FDFF). Тепер HotPDF відображає ці літери на відповідний гліф Forms-A під час позиційного формування, тому текст перською мовою та урду відображається з правильними формами init / medi / fina / isol у будь-якому переглядачі
Арабська Extended-A + Доповнення (v2.119.52, v2.119.56): таблиця класів з'єднання тепер охоплює решту символів арабської Extended-A (варіанти ALEF WASLA / NOON GHUNNA / HEH), арабське доповнення U+0750-U+077F та вищий діапазон арабської Extended-A U+08A0-U+08FF. Символи зі статичним кодуванням Presentation Forms-A відображаються за допомогою існуючого 4-позиційного формувача; символи без нього (більшість із Extended-A) отримують лише класифікацію класу з'єднання, щоб сусідні символи формувалися правильно, навіть коли сам символ передається без змін. У версії v2.119.56 виправлено два неправильні відображення Forms-A, представлені у v2.119.52 (U+06C2 / U+06C3)
Повне охоплення перської мови / урду Form-B (v2.119.57): таблиця класів з'єднання була розширена, щоб охопити весь діапазон U+0672-U+06D5 (близько 80 символів, що включають варіанти REH / DAL / SEEN / SAD / TAH / AIN / FEH / QAF / KAF / GAF / LAM / NOON / HEH / WAW / YEH), і додано 26 нових відображень Presentation Forms-A (15 для 4-форм класу D + 11 для 2-форм класу R). Зокрема, стандартна HEH DOACHASHMEE в урду (U+06BE → FBAA-FBAD) та кінцева YEH BARREE в урду (U+06D2 → FBAE-FBAF) тепер правильно відображаються на слоти Forms-A, які були неправильно використані тимчасовим виправленням ALEF WASLA / NOON GHUNNA у версії v2.119.52. Статичне охоплення Forms-A тепер охоплює понад 40 вихідних символів
Пост-прохід лігатур YEH-HAMZA + голосна (v2.119.58): пост-прохід, доданий до
Лігатура Аллах (v2.119.60): чотирьохсимвольна послідовність ALEF + LAM + LAM + HEH згортається в U+FDF2 ARABIC LIGATURE ALLAH ISOLATED FORM. Реалізовано як статичний пост-прохід на рівні кодових точок після LAM-ALEF (v2.119.32) та YEH-HAMZA (v2.119.58) у ланцюжку
Лігатура фрази Бісміллах (v2.119.62): стандартна 22-символьна фраза Бісміллах "بسم الله الرحمن الرحيم" згортається в один гліф U+FDFD ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM. Запускається як найперший попередній прохід в
Публічні допоміжні методи запитів Метод
Як викликати Конвеєр формування працює автоматично всередині методів виведення тексту Unicode - явний виклик "сформувати це" не потрібен. Передайте вхідні рядки арабською, перською мовами чи урду в кодуванні Unicode до THPDFPage.UnicodeTextOut або THPDFPage.RtLTextOut, і HotPDF відобразить кожну вхідну кодову точку на її презентаційну форму перед записом оператора виведення тексту PDF. Оригінальні байти Unicode також записуються у
Вимоги до шрифтів Шрифт, зареєстрований через
Noto Sans Arabic (латиниця + арабська; Forms-A + Forms-B + Arabic Extended-A) Noto Naskh Arabic, Noto Naskh Arabic UI Amiri (традиційний насх, повне охоплення Forms-A + Forms-B) Scheherazade New (SIL, розроблений для мов мусульманського світу) Microsoft Arabic Typesetting / Tahoma / Times New Roman (поставляються з Windows, повне охоплення Forms-B; деякі мають охоплення Forms-A)
Якщо у зареєстрованому шрифті відсутній гліф для похідної презентаційної форми, HotPDF повертається до базової кодової точки Unicode та виводить її без змін; тоді переглядачі можуть спробувати виконати власне формування (Acrobat, Foxit) або відобразити
Типовий процес роботи
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" (привіт) PDF.EndDoc;
Автоматична інтеграція конвеєра фази 8 (v2.119.59 - v2.119.68) У версії v2.119.59 представлено властивість
Коли встановлено
Зворотне відображення лігатур ToUnicode CMap (v2.119.61, v2.119.62, v2.119.65) Adobe-Identity-UCS ToUnicode CMap, виведений методом
Виведення синтетичних кодових точок PUA (v2.119.68) Методи
Зв'язок із рушієм OpenType GSUB Статичний формувач пост-проходу, опис якого наведено вище (v2.85.0 + v2.119.32 / 58 / 60 / 62), за замовчуванням є незалежним від рушія OpenType GSUB. Коли
Для замінених гліфів без кодової точки Unicode розробники поєднують
Область застосування та обмеження Алгоритм BiDi залишається поза межами цієї сторінки: розробникам все одно потрібно самим упорядковувати змішані послідовності LTR і RTL або використовувати окрему бібліотеку BiDi. Підтримка GPOS, Indic/Tibetan/Mongolian, Hebrew, N'Ko, Adlam, Thai/Lao та Javanese тепер знаходиться на окремих сторінках прапорців формування та API, тому ця сторінка зосереджена лише на статичному та базованому на GSUB арабському формуванні
Див. також: OpenType GSUB Substitution Engine, Automatic Shaping Pipeline (Phase 8), Syriac / Mongolian / Devanagari Shaping, THotPDF.AssignSyntheticCodepointForGID, THPDFPage.RtLTextOut, THPDFPage.UnicodeTextOut, CFF / OpenType Font Subsetting |