Проблема печати с хинди Unicode в Windows и Ubuntu

Я работаю с текстом на хинди в формате pdf. Хотя текст на хинди генерируется, но отображается как неуместные матры. Предположим, у меня есть слово типа «ज़िन्दगी», но оно отображается как

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

Если я скопирую этот текст и вставлю в Libre Office Writer, он будет напечатан правильно. Я пробовал почти два шрифта с tcpdf. Arial Unicode MS, а также Lohit_hi

$tcpdf->SetFont('arialuni', 'B', 15, 'false');
$html = nl2br($result['Song']['hindi']);
$tcpdf->writeHTMLCell(0, 20, 20, 25, $html);

Почему он показывает характер, но неуместен в своей позиции.


person Sankalp    schedule 01.09.2013    source источник


Ответы (3)


Если я скопирую и вставлю «ज़िन्दगी» в Microsoft Word, по умолчанию это будет выглядеть так:

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

На самом деле это одна и та же строка символов Юникода (то есть िन, за которой следует вирама, за которой следует द), но она просто отображается по-разному, в зависимости от шрифта. Шрифты Unicode имеют сложную логику для принятия решения о том, когда заменять определенную строку символов другим глифом, а шрифт, используемый вашим PDF-файлом, не поддерживает конкретную замену, которую вы хотите.

Вам просто нужно найти шрифт, который поддерживает эту замену, и убедиться, что ваш PDF-файл использует этот шрифт. (Возможно, ваш текущий вызов setFont работает неправильно, или указанный вами шрифт недоступен в то время, когда вы его устанавливаете, поэтому он использует системный шрифт по умолчанию для символов хинди, который не поддерживает замена, которую вы имеете в виду).

person joshua.paling    schedule 02.09.2013
comment
Спасибо за информацию. Я понимаю, что это проблема рендеринга. Не могли бы вы пояснить, какие именно шрифты хинди поддерживаются tcpdf. Я пробовал как Arial Unicode MS, так и Lohiti HIndi. Но в обоих случаях проблема с рендерингом остается. - person Sankalp; 02.09.2013
comment
Я не использовал tcpdf, поэтому не могу предоставить вам больше, чем то, что доступно здесь: tcpdf. org/fonts.php - person joshua.paling; 02.09.2013
comment
Привет Джошуа - просто уточнение: первое слово - зиндаги, а второе - занидаги. Вы имели в виду, что оба слова имеют ZNDG, но интерпретация гласных зависит от выбранного шрифта? - person Jay Sheth; 26.09.2013
comment
Джей, да, это точно такая же строка символов Юникода, то есть ज, затем ़ि, затем न, затем ् и т. д. Шрифт никоим образом не меняет порядок символов, но он меняет способ их отображения вместе. - person joshua.paling; 27.09.2013
comment
у нас была точно такая же проблема mpdf1.com/mpdf/index.php?page=Download работал на нас - person abksharma; 07.12.2013

Почему вы не используете writeHTML() вместо writeHTMLCell()? Ваша проблема явно связана с клеткой. Похоже, что высота строки неверна или даже установлен атрибут CSS для повторения фона (должно быть background-repeat:none; ). writeHTML() предотвратит это.

person Hexodus    schedule 21.09.2013
comment
Это неосуществимо. Я пробовал оба. Такая же проблема рендеринга существует. - person Sankalp; 25.09.2013

Я не верю, что TCPDF может правильно отображать сценарий хинди. Одних только шрифтов недостаточно для отображения сложных сценариев. Следующая цитата является выдержкой из ветки комментариев относительно рендеринга текста Saurashtra в TCPDF. Вероятно, это относится и к хинди. Насколько мне известно, малаялам и гуджарати не могут быть отображены в TCPDF.

[Re: Рендеринг текста Saurashtra в TCPDF] [...] Для TCPDF шрифт истинного типа необходимо сначала преобразовать в формат afm, затем для каждого сценария правила диакритических знаков или лигатур реализуются в самом tcpdf. [...] Шрифтов недостаточно для рендеринга, для сложного сценария также требуется механизм формирования для интерпретации правил формирования глифов. Это то, что PyPDFLib пытается решить, используя Pango для рендеринга скриптов и Cairo для графики. Santosh -- Комментарий к созданию новой языковой экосистемы- Например, Сураштра

Пример для mPDF демонстрирует функциональный хинди, как указано в ответе на этот вопрос. : язык хинди неправильно отображается в tcpdf

person EPB    schedule 27.09.2013