2013-09-01 28 views
7

Pracuję z Hindi Text na pdf. Chociaż generowany jest tekst w języku hindi, ale jest wyświetlany jako zagubione matry. Załóżmy, że mam słowo jak „ज़िन्दगी” ale jego pokaz jakProblem z drukowaniem za pomocą hindi Unicode w systemie Windows i Ubuntu zarówno

enter image description here

Gdybym skopiować tekst i wkleić na LibreOffice Writer następnie drukuje poprawne. Próbowałem prawie dwóch czcionek z tcpdf. Arial Unicode MS, a także Lohit_hi

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

Dlaczego pokazuje swoją postać, ale źle umieścił swoją pozycję.

Odpowiedz

1

Gdybym skopiuj i wklej „ज़िन्दगी” w programie Microsoft Word domyślnie pokazuje tak:

enter image description here

To rzeczywiście dokładnie ten sam ciąg znaków Unicode (to jest िन następnie virama, po którym następuje द), ale jest renderowany na różne sposoby, w zależności od czcionki. Czcionki Unicode mają złożoną logikę, która pozwala zdecydować, kiedy zastąpić określony ciąg znaków dla innego glifu, a czcionka używana w pliku PDF nie obsługuje określonego zamiaru.

Trzeba tylko znaleźć czcionkę, która obsługuje tę zmianę i upewnić się, że plik PDF korzysta z tej czcionki. (Może się zdarzyć, że twoje bieżące wywołanie setFont nie działa poprawnie lub określona czcionka nie jest dostępna w momencie jego ustawiania, więc używa domyślnej czcionki systemu dla znaków hindi, która nie obsługuje podstawienie, do którego się odnosisz).

+0

Dzięki za informacje. Jestem przekonany, że kwestia renderowania. Czy możesz nam wyjaśnić, które dokładnie czcionki hindi są obsługiwane przez tcpdf. Próbowałem zarówno "Arial Unicode MS" jak również 'Lohiti HIndi'. Ale w obu przypadkach problem z renderowaniem nadal pozostaje z nim. – Sankalp

+0

Nie korzystałem z tcpdf, więc nie mogę podać nic więcej niż to, co jest dostępne tutaj: http://www.tcpdf.org/fonts.php –

+0

Cześć Joshua - tylko wyjaśnienie: pierwsze słowo to zindagi, a drugie to zaneedagi. Czy miałeś na myśli, że oba słowa mają ZNDG, ale że interpretacja samogłosek zależy od wybranej czcionki? –

1

Dlaczego nie używasz writeHTML() zamiast writeHTMLCell()? Twój problem wyraźnie koreluje z komórką. Wygląda na to, że wysokość linii jest nieprawidłowa lub nawet jest ustawiony atrybut CSS dla powtarzania tła (powinno to być background-repeat: none;). writeHTML() zapobiegnie temu.

+0

Nie jest to możliwe. Próbowałem obu tego. Występuje ten sam problem z renderowaniem. – Sankalp

1

Nie wierzę, że TCPDF może poprawnie renderować skrypt w języku hindi. Same czcionki nie są wystarczające do renderowania skomplikowanych skryptów. Poniższy cytat jest fragmentem wątku komentarza dotyczącego renderowania tekstu Saurashtra w TCPDF. To prawdopodobnie dotyczy także hindi. Malajalam i gudżarati nie mogą być renderowane w TCPDF, o ile wiem.

[Re: Renderowanie tekstu Saurashtra w TCPDF] [...] W TCPDF, prawdziwy typ czcionki muszą być zamienione na AFM formatu, następnie dla każdego scenariusza, znaki diakrytyczne lub ligature zasady są realizowane w sam tcpdf. [...] Czcionki są niewystarczające do renderowania, potrzebny jest również silnik kształtujący do złożonego skryptu do interpretacji reguł tworzenia glifów przez . To właśnie PyPDFLib próbuje rozwiązać, używając Pango do renderowania skryptów i Kairu dla grafiki. Santosh -- Comment on creating a new Language ecosystem- Sourashtra as example

Przykład dla mPDF wydaje się wykazywać funkcjonalne hindi, jak podano na odpowiedź na to pytanie: Hindi language not displaying correctly on tcpdf