使用TCPDF创建PDF,支持所有语言,尤其是CJK


Creating PDFs using TCPDF that supports all languages especially CJK

有人能举一个清晰简洁的例子,说明如何使用TCPDF创建支持任何语言的文本字符串的PDF吗?

似乎没有一种字体可以支持所有语言。我猜字体会太大吗?

我认为正确的方法是检测字符串的语言,并动态地将字体类型设置为兼容的字体。如果是这种情况,那么检测每个字符串的语言就会变得非常复杂。

如果使用"freeserif"字体,则支持大多数语言。但是它不支持CJK字体。我已经尝试了许多字体(kozminproregular、cid0jp、cid0kr、cidojp、stsongstdlight)来获得对中文、日语和韩语的支持,但它们似乎都不支持这三种语言。

通过以下步骤从arialms-unicode中制作我自己的字体来解决这个问题:

在临时脚本中放入并执行此
1.将ARIALUNI.ttf的副本放在tcpdf安装下的font文件夹中(我从windows''fonts文件夹中获取了副本。
2.在tcpdf的examples文件夹中制作一个临时脚本,并用以下行执行:
$fontname=$pdf->addTTFfont('../fonts/ARIALUNI.ttf','TrueTypeUnicode','',32)
3.在pdf生成器脚本中设置新字体:
$pdf->SetFont('arialuni','',20)

现在pdf应该显示正确的CJK字符
希望这能帮助这么多人

这对我来说非常成功。谢谢!

为了确保生成的PDF文件不会变大,请使用FontSubsetting-我有一个10页的PDF生成,只有几行中文(文凭上的名字)

$pdf->setFontSubsetting(true);=>PDF文件稍大925kb vs 755kb没有中文名称如果您使用$pdf->setFontSubsetting(false);=>PDF文件大小约为17.5 MB。。。

在我的应用程序中,我必须支持近50多种语言。在生成pdf时,所有语言都不能正确地用pdf表示。

解决方案

1.使用addTTfont方法将新字体(arialuni.tff)下载并添加到tcpdf/fonts/文件夹中。它将生成php、ctg.z、z文件。生成文件后,我们可以从font文件夹中删除tff文件。

TCPDF_FONTS::addTTFfont('path/to/folder'.'/lib/TCPDF/FONTS/arialuni.ttf','TrueTypeUnicode','',96);

  1. 识别国家代码并相应地更改字体类型。大多数语言都支持freeserif。对于CJK语言将支持arialuni

     switch($iomadcertificate->lang){ 
     case 'my': 
     case 'az': $font = 'zawgyi'; 
                break; 
     case 'ja': 
     case 'ko': $font = 'arialuni'; 
                 break; 
     case 'zhtw': $font = 'stsongstdlight'; 
                 break; 
      default : $font = 'freeserif'; 
       break; 
    }
    $pdf->setFont($font, $style, $size);
    

我刚刚尝试了Etiennez0r的解决方案,但它对我不起作用。需要进行以下小修改:

$fontname = TCPDF_FONTS::addTTFfont('../fonts/ARIALUNI.TTF', 'TrueTypeUnicode', '', 96);

I设置:

$fontname = TCPDF_FONTS::addTTFfont(FCPATH . 'TCPDF/fonts/ARIALUNI.ttf', 'TrueTypeUnicode', '', 32);

//设置字体

$pdf->SetFont('dejavusans', '', 14);
$pdf->SetFont('cid0cs', '', 14);

导出日语运行良好