2013-09-01 30 views
7

Tôi đang làm việc với Hindi Text trên pdf. Mặc dù văn bản tiếng Hin-ddi đang tạo nhưng hiển thị văn bản của nó là matras không đúng chỗ. Giả sử tôi có từ như 'ज़िन्दगी' nhưng hiển thị của nó nhưSự cố in ấn với Hindi Unicode trên Windows và Ubuntu cả

enter image description here

Nếu tôi sao chép văn bản này và dán trên LibreOffice Writer sau đó nó sẽ in đúng. Tôi đã thử gần hai phông chữ với tcpdf. Arial Unicode MS cũng như Lohit_hi

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

Tại sao lại hiển thị ký tự nhưng thất lạc vị trí của chúng.

Trả lời

1

Nếu tôi sao chép và dán 'ज़िन्दगी' vào Microsoft Word, theo mặc định, nó cho thấy như thế này:

enter image description here

Nó thực sự cùng chuỗi chính xác của các ký tự unicode (có nghĩa là, một िन tiếp theo một virama, theo sau là द), nhưng nó chỉ được hiển thị theo nhiều cách khác nhau, tùy thuộc vào phông chữ. Các phông chữ Unicode có logic phức tạp để quyết định khi nào thay thế một chuỗi ký tự nhất định cho một hình tượng khác, và phông chữ được sử dụng bởi tệp PDF của bạn không hỗ trợ thay thế cụ thể mà bạn muốn.

Bạn chỉ cần tìm một phông chữ hỗ trợ thay thế đó và đảm bảo rằng tệp PDF của bạn đang sử dụng phông chữ đó. (Có thể trường hợp cuộc gọi setFont hiện tại của bạn không hoạt động chính xác hoặc phông chữ bạn chỉ định không khả dụng tại thời điểm bạn đặt, do đó, nó sử dụng phông chữ mặc định của hệ thống cho các ký tự tiếng Hin-ddi, không hỗ trợ thay thế bạn đang đề cập đến).

+0

Cảm ơn thông tin. Tôi rõ ràng rằng vấn đề kết xuất của nó. Bạn có thể vui lòng cho tôi biết phông chữ Hindi chính xác nào được hỗ trợ bởi tcpdf không. Tôi đã thử cả hai 'Arial Unicode MS' cũng 'Lohiti HIndi'. Nhưng trong cả hai trường hợp, vấn đề vẫn còn tồn tại với nó. – Sankalp

+0

Tôi chưa sử dụng tcpdf, vì vậy tôi không thể cung cấp cho bạn nhiều hơn những gì có sẵn tại đây: http://www.tcpdf.org/fonts.php –

+0

Hi Joshua - chỉ cần làm rõ: từ đầu tiên là zindagi, và thứ hai là zaneedagi. Ý bạn là cả hai từ đều có ZNDG, nhưng cách diễn giải của nguyên âm phụ thuộc vào phông chữ được chọn? –

1

Tại sao bạn không sử dụng writeHTML() thay vì writeHTMLCell()? Vấn đề của bạn tương quan rõ ràng với tế bào. Có vẻ như chiều cao của dòng là sai hoặc thậm chí có thuộc tính CSS cho lặp lại nền được đặt (nên lặp lại nền: none;). writeHTML() sẽ ngăn chặn điều này.

+0

Nó không khả thi. Tôi đã thử cả hai. Vấn đề hiển thị giống nhau tồn tại. – Sankalp

1

Tôi không tin rằng TCPDF có thể hiển thị kịch bản tiếng Hindi đúng cách. Các phông chữ một mình không đủ để hiển thị các tập lệnh phức tạp. Trích dẫn sau đây là một đoạn trích từ một chuỗi nhận xét về việc hiển thị văn bản Saurashtra trong TCPDF. Điều này cũng có thể áp dụng cho tiếng Hindi. Malayalam và Gujarati không thể được hiển thị trong TCPDF hoặc theo như tôi biết.

[Re: Rendering Saurashtra văn bản trong TCPDF] [...] Đối với TCPDF thì đúng kiểu font cần phải chuyển đổi sang định dạng AFM đầu tiên, sau đó cho mỗi kịch bản, bỏ dấu hoặc quy tắc chữ ghép được thực hiện trong tcpdf. [...] Phông chữ không đủ để hiển thị, cũng cần có công cụ tạo hình cho tập lệnh phức tạp để giải thích các quy tắc hình thành glyph. Đây là những gì PyPDFLib đang cố gắng giải quyết bằng cách sử dụng Pango để hiển thị tập lệnh và Cairo cho đồ họa. Santosh -- Comment on creating a new Language ecosystem- Sourashtra as example

Ví dụ cho mPDF xuất hiện để chứng minh chức năng Tiếng Hin-ddi, như giới thiệu trên một câu trả lời cho câu hỏi này: Hindi language not displaying correctly on tcpdf