2015-09-06 108 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秒:(任何想法? –