2015-09-06 119 views
1

我正面臨着使用TCPDF庫在php中生成pdf的問題。我需要正確顯示孟加拉字體。我嘗試添加一些孟加拉字體(即SolaimanLipi.ttf,SutonnyOMJ.ttf,Siyamrupali.ttf,Nikosh.ttf等)。我可以在pdf上看到孟加拉字體,但字體顯示不正確。它放錯了這個詞。孟加拉(Unicode)字體在tcpdf中無法正確呈現

通過添加這種字體,我看到在/ fonts /目錄下成功創建了3個文件「solaimanlipi.ctg.z」,「solaimanlipi.php」和「solaimanlipi.z」。以及我可以在PDF上看到孟加拉字體,但是這種字體錯位/分散。我附上我實際看到的照片。

這是它應該如何看(從瀏覽器截圖): enter image description here

這裏是顯示上述結果的代碼:

<?php 
$strData = file_get_contents('./data3.txt'); 
?> 
<html lang="en" dir="ltr"> 
<head> 
    <meta charset="utf-8" /> 
    <style> 
    @font-face 
    { 
     font-family: myUniFont; 
     src: url(./SolaimanLipi_22-02-2012.ttf); 
    } 
    </style> 
</head> 
<body> 
    <span style="font-family: myUniFont;"><?php echo $strData; ?></span> 
</body> 
</html> 

我用下面的代碼來使用同樣的字體,我PDF:

$strBNFont = TCPDF_FONTS::addTTFfont('./SolaimanLipi_22-02-2012.ttf', 'TrueTypeUnicode', '', 32); 
$pdf->SetFont($strBNFont, '', 8, '', 'false'); 

,它是怎麼看起來像PDF::(

enter image description here 請指教我如何正確顯示孟加拉字體。

編輯#1

哇! (OMG

親愛的主席先生,問題不就PDF/TCPDF庫甚至也不是在字體文件,它自

請檢查下面的PHP代碼:

<?php 
header('Content-type: image/png'); 

$text = 'তোমাদের জন্য মুক্তিযুদ্ধের গল্প'; 

$font = './Fonts/SolaimanLipi_22-02-2012.ttf'; 

$im = imagecreatetruecolor(600, 300); 

$bg_color = imagecolorallocate($im, 255, 255, 255); 

$font_color = imagecolorallocate($im, 0, 0, 0); 

imagefilledrectangle($im, 0, 0, 599, 299, $bg_color); 

imagettftext($im, 20, 0, 10, 50, $font_color, $font, $font); 

imagettftext($im, 20, 0, 10, 120, $font_color, $font, $text); 

imagepng($im); 

imagedestroy($im); 

?> 

這究竟是怎麼出口! /渲染瀏覽器的PNG圖像:

enter image description here

當我嘗試使用imagettftext功能它也打破了C到打印圖像文件中的文本字符:(

因爲我相信它不是字體問題,因爲我剛剛測試過60 +字體和所有破碎..瀏覽器(HTML代碼)顯示他們非常正確。

所以,我的東西,這是非常大於我的大腦可以容納/處理;(

所以,像你這樣的專家可能會唯一出路再次:)

感謝您的時間

+0

hello有什麼幫助嗎? –

+0

沒有人熟悉tcPDF unicode問題? –

+0

我非常困難,真的需要一些幫助... –

回答

1

TCPDF本身can't handle Brahmic scripts

我已經發布其他語言的相似:How can I create Malayalam PDF using TCPDF in PHP?

我相信MPDF有你的文本支持基於此示例文件:http://mpdf1.com/examples/example_utf8.pdf

我會建議嘗試mPDF了,如果你沒有死區在TCPDF上設置。如果能夠實現這一目標,比起我要概述的方法,它肯定更容易。


另一種選擇,不過,在我看來複雜得多是使用ImageMagick的具有攀高渲染你的文字爲圖像,然後將其包含在PDF。這與ImageMagick的正常字體渲染不同,正如你看到的那樣,它正在被破壞以供你使用。我將這個問題納入了更多的學術興趣,除非你找到一個令人信服的理由,否則我不一定會這樣做。

我基本上與攀高支持安裝的ImageMagick後,從外殼做到這一點:

#Install font for my user. 
cp /host/SolaimanLipi_22-02-2012.ttf .fonts 

#update the font-config cache 
fc-cache 

#Render the text with pango 
convert -background white -size 400x pango:@/host/bangali.txt /host/out.gif 

/host/bangali.txt包含<span font='18.5'>তোমাদের জন্য মুক্তিযুদ্ধের গল্প</span> *

然後呈現這樣的輸出,我認爲這是至少大部分糾正:

Bangla rendered correctly, I think

這是因爲攀高的S- haping引擎能夠這樣做。雖然這樣做有一些警告。其中最重要的是讓font-config從CGI或mod_php正確運行,這是可行的,但在我的經驗中很棘手。

  • 我沒有指定字體名,因爲我只有一個班加拉字體,所以font-config發現並使用我已經安裝了一個。
+0

親愛的先生,非常感謝您的時間和帖子/答案。1.先生,我的項目已經完成(PDF部分主要)與tcPDF與一些複雜的部分,如每頁重複列標題,自動分頁等?你認爲將這些代碼轉換爲mPDF不需要很長時間嗎? 2.是的,我也認爲寫圖片上的文字,然後添加pdf是不是最好的方式去..再次感謝您的回覆 –

+0

一些如何我想要與mPDF工作。但不能罰款如何自動調整文本大小以適應表格單元格。 tcPDF有空間函數嗎mPDF? –

+0

先生,也mPDF太(很多)比tcPDF慢,同樣的報告mPDF花了564.4080秒,其中tcPDF只需要57.5938秒:(任何想法? –