Замены лигатур, обратное разделение глифов и gsub в PDFbox
Программы просмотра PDF не отображают все тамильские буквы, как ожидалось, в PDF, сгенерированном с помощью PDFbox. Кажется, мне нужно сделать необходимые замены при создании PDF-файла, чтобы он отображался должным образом.
Попытка замены, любая помощь будет оценена. В основном это три случая, требующие замены или изменения тамильских букв. Большинство замен остальных букв более или менее следуют одному и тому же.
Нужно обратить глифы
கெ = க + ெ = க ெ -> ெ + க = கெ
Нужно разделить и изменить порядок глифов
கொ = க + ொ = க ொ -> க + ெ + ா -> ெ + க + ா = கொ
Новый результирующий глиф — замена ряда глифов новым глифом. Новый глиф не имеет юникода, он существует только в файле шрифта.
கு = க + ு = க ு -> கு
Ниже приведен фактический рендеринг контента из программы просмотра PDF.
Ниже приведено ожидаемое содержимое, выполненные жестко закодированные замены (для идентификатора глифа без юникода, жестко закодированного в PDCIDFontType2#public byte[] encode(int unicode). Перед вызовом showtext перевернуть, разделить и изменить порядок входной текстовой последовательности. Также добавлены идентификатор глифа, который не имеет юникода в TrueTypeEmbedder Subsetter для встраивания глифа в сгенерированный PDF-файл.), просто чтобы получить его.
Как эффективно обрабатывать эти замены?
Глядя на GlyphSubstitutionTable, fontbox.cmap.Identity-H, fontbox.unicode.Scripts.txt. Не удалось получить это до сих пор. Любая помощь будет оценена по достоинству.
1 ответ
Вам необходимо внедрить механизм формирования текста для обработки письма на тамильском языке.
Пожалуйста, ознакомьтесь со спецификацией OpenType: https://docs.microsoft.com/en-us/typography/opentype/spec/ , таблицы GSUB/GPOS представляют для вас наибольший интерес.
Это непростая задача, поэтому, возможно, лучшим выбором будет использование внешней библиотеки, такой как HarfBuzz .
Существует также проблема PDFBox (4189), касающаяся бенгальской письменности. Возможно, это поможет вам реализовать поддержку тамильского языка.