Тайский символ неправильно отображается в PDF

Мое приложение должно иметь возможность выводить PDF-файл, содержащий руководство пользователя на нескольких поддерживаемых языках. (я использую pdfkit)

У меня были некоторые проблемы с поиском подходящего шрифта для тайского языка: некоторые так называемые тайские поддерживаемые языки (включая Noto Thai от Google) выводили квадраты, вопросительные знаки или еще хуже нечитаемые вещи.

После небольшого исследования я нашел один, который, казалось, работал достаточно хорошо, пока наш тайский парень не заметил, что персонажи

ต่ำ

были визуализированы, как на картинке ниже, в основном с двумя элементами над первым символом, свернутым так, чтобы один закрывал другой

введите здесь описание изображения

Я использую Nimbus Sans Thai Family, загруженную с myfonts.com который, кстати, может правильно отображать эти символы, так как вы можете попробовать скопировать ต่ำ в поле предварительного просмотра.

Любые подсказки?


person Francesco Giordano    schedule 02.08.2017    source источник


Ответы (2)


Ваш шрифт в некотором роде неполный. В нем отсутствуют некоторые глифы, которые обычно находятся в области частного использования (PUA) Unicode.
Некоторые приложения (мне известно о Microsoft Word) могут вручную решить эту проблему, но ваше приложение для рендеринга (и Adobe Acrobat Viewer) этого не делает. .
Вам следует либо найти шрифт с этими глифами, либо найти приложение, которое заменяет существующие глифы вручную.


Многие шрифты, несмотря на заявления о поддержке тайского языка (а они действительно содержат обычные тайские глифы), могут быть неполными.

Помимо канонических глифов, правильно сформированный шрифт должен содержать поддиапазон частной области использования (PUA), который содержит глифы в неканонических формах. Эти глифы включают в себя:

  1. Знаки тона смещены в верхнюю позицию для использования в сочетании с гласными верхнего ряда (SARA_I, SARA_UE и т. д.) и сдвинуты в нижнюю позицию в случае сочетания согласных + знака тона и отсутствия гласной верхнего ряда;
    KO_KAI + MAI_EK
  2. Знаки тона и верхние гласные немного сдвинуты влево для использования в сочетании с PO_PLA, FO_FAN и т. д. (иначе они перекрываются с верхним хвостом согласных);
    PO_PLA + SARA_I
  3. также оба эффекта вместе взятые, например. одновременно тональная метка сместилась вниз-влево:
    PO_PLA + MAI_EK
  4. Специальные глифы для YO_YING и THO_THAN (без хвоста) для использования в сочетании с нижними гласными;
    YO_YING_SARA_U
  5. Еще несколько;

Обычно, когда отображаемое приложение находит вышеупомянутые комбинации символов, оно ищет заменяющие глифы в области PUA. Если он не найден, он просто возвращается к глифу по умолчанию, что и происходит в вашем случае.

Вот два скриншота областей PUA Arial Unicode и FreeSerif, которые говорят сами за себя: FreeSerif имеет пустую PUA. Я думаю, та же проблема возникает с вашим шрифтом Nimbus.

Шрифт с отсутствующим PUA

Шрифт с заполненным PUA


И последнее наблюдение. Неправильные шрифты могут быть неверными по-разному. Выше я описал более канонический случай, когда стандартные позиции тона обозначают верхние позиции, а нестандартные позиции смещены вниз (или отсутствуют, что составляет неполную font).
Однако есть шрифты, которые ведут себя противоположным образом; они (только) содержат знаки тона в нижних позициях. Это то, что вы, кажется, наблюдаете.

person bytebuster    schedule 02.08.2017

Проблема в том, что PDFKit не выполняет рендеринг сложных сценариев.
Несколько шрифтов, таких как арабский, тайский и т. д., требуют замены глифов и изменения их положения в зависимости от контекста (положение в строке, соседние символы), а PDFKit, похоже, этого не делает.
Приложения для просмотра PDF отображают именно то, что определено в файле PDF. Шрифт Nimbus Sans Thai, вероятно, включает в себя все необходимые глифы, но то, что байтбастер объясняет в своем ответе, должно выполняться PDFKit, а не приложением для просмотра.

person iPDFdev    schedule 03.08.2017