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

问题描述 投票:0回答:5

有人可以整理一个清晰简洁的示例来说明如何使用 TCPDF 创建支持任何语言文本字符串的 PDF 吗?

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

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

如果您使用“freeserif”字体,则支持大多数语言。但它不支持 CJK 字体。我尝试了很多字体(kozminproregular、cid0jp、cid0kr、cid0jp、stsongstdlight)来支持中文、日文和韩文,但似乎没有一个字体支持所有三种语言。

php tcpdf cjk
5个回答
1
投票

这对我来说非常完美。谢谢!

为了确保生成的 PDF 文件不会变得很大,请使用 FontSubsetting - 我生成了一个 10 页的 PDF,仅包含几行中文(文凭上的姓名)

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


0
投票

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

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

现在 pdf 应该可以正确显示 CJK 字符。
希望这可以帮助很多人。


0
投票

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

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

0
投票

我设置:

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

...... // 设置字体

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

日语出口运作良好


0
投票

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

解决方案

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

TCPDF_FONTS::addTTFfont('路径/到/文件夹'.'/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);
    
© www.soinside.com 2019 - 2024. All rights reserved.