TCPDF 6.0.047-UTF-8和时间新罗马字体



我试图用tcpdf做一个报告,但它不适用于utf-8(越南语)

// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetFont('times', '', 10, '', false);
$pdf->writeHTML("TỔNG HỢP", true, false, false, false, '');
//Close and output PDF document
$pdf->Output('test.pdf', 'I');

但输出为T?NG H?P。如何解决这一问题,感谢

1)字体首先,我将我的Windows8"Times new roman"fonor从c:\windows\fonts复制到tcpdf/fonts下一个名为"tnr"的临时目录中。有4个文件"times.ttf","timesbi.ttf"、"timesbd.ttf"one_answers"timesi.ttf"。

2) 然后从tcpdf/fonts 中删除"times.php"

3) 重新制作时代字体def,并用这个添加新的bi(粗体斜体)

// remake times
$fontpath1='../fonts/tnr/times.ttf';
$fontpath2='../fonts/tnr/timesbd.ttf';
$fontpath3='../fonts/tnr/timesbi.ttf';
$fontpath4='../fonts/tnr/timessi.ttf';
$fontname1 = $pdf->addTTFfont($fontpath1, 'TrueTypeUnicode', '', 96);
$fontname2 = $pdf->addTTFfont($fontpath2, 'TrueTypeUnicode', '', 96);
$fontname3 = $pdf->addTTFfont($fontpath3, 'TrueTypeUnicode', '', 96);
$fontname4 = $pdf->addTTFfont($fontpath4, 'TrueTypeUnicode', '', 96);

4) 修改了脚本,以4种方式打印字符串。粗体和斜体不起作用,但不确定如何重新制作。然而,普通和粗体斜体确实有效,你可以看到对比。

5) 修改后的脚本


<?php
// Include the main TCPDF library (search for installation path).
require_once('tcpdf_include.php');
// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set document information
$pdf->SetCreator('zzz');
$pdf->SetAuthor('zzz');

// set default font subsetting mode
//$pdf->setFontSubsetting(true);
// remake times
$fontpath1='../fonts/tnr/times.ttf';
$fontpath2='../fonts/tnr/timesbd.ttf';
$fontpath3='../fonts/tnr/timesbi.ttf';
$fontpath4='../fonts/tnr/timessi.ttf';
$fontname1 = $pdf->addTTFfont($fontpath1, 'TrueTypeUnicode', '', 96);
$fontname2 = $pdf->addTTFfont($fontpath2, 'TrueTypeUnicode', '', 96);
$fontname3 = $pdf->addTTFfont($fontpath3, 'TrueTypeUnicode', '', 96);
$fontname4 = $pdf->addTTFfont($fontpath4, 'TrueTypeUnicode', '', 96);

$pdf->AddPage();
$string="TỔNG HỢP";
$pdf->SetFont('times', '', 14, '', false);
$pdf->writeHTML('default ' . $string,true, 0, true, 0);
$pdf->SetFont('times', 'b', 14, '', false);
$pdf->writeHTML('bold ' . $string,true, 0, true, 0);
$pdf->SetFont('times', 'i', 14, '', false);
$pdf->writeHTML('italic ' . $string,true, 0, true, 0);
$pdf->SetFont('times', 'bi', 14, '', false);
$pdf->writeHTML('bold italic ' . $string,true, 0, true, 0);

//Close and output PDF document
$pdf->Output('test.pdf', 'I');
?>

我在波兰字符方面也遇到过类似的问题,但只是在firefox pdf浏览器方面。

试试这个:

$pdf->setFontSubsetting(false);

编辑

我查看了你的示例数据。。setFont子集不工作(正如您所说):(

我做了一些测试。当我更改字体时,报告开始正常工作。

例如:

    $pdf->SetFont('freeserif', '', 10, '', false);

    $pdf->SetFont('dejavuserifbi', '', 10, '', false);

和其他字体:freesans,dejavuserifi,freeserif,但不是"times"。

正确使用定义中的所有字体:

    $type='TrueTypeUnicode';

(在tcpdf/fonts/freesans.php中查找)

我认为"times"没有用于utf8编码的完整字符表。在字体定义中,只有255个元素,但在"freeserif"中超过65kTimes只是标准ASCII字符的核心字体。

你试过这个吗使用TCPDF创建PDF,支持所有语言,尤其是CJK

编辑

我测试了上面链接的解决方案。。

我的步骤:

  1. 将时间.ttf从windows字体目录复制到tcpdf/fonts/utils
  2. 在同一目录中,从命令行运行:

    ttf2ufm -a -F times.ttf
    

    php -q makefont.php times.ttf times.ufm

注意:此工具在"min"版本的TCPDF中不可用。

  1. 将新文件:times.ctg.z、times.php、times.t1a、times.z复制到tcpdf/fonts中

运行脚本:

    // create new PDF document
    $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
    $pdf->SetFont('times', '', 10);
    $pdf->AddPage();
    $pdf->writeHTML("TỔNG HỢP", true, false, false, false, '');
    $pdf->Output('test.pdf', 'I');

这对我来说很好:)

我也遇到过这个问题。我的工作方式是使用dejavusans字体,因为这种字体是为utf8unicode设计的,而tcpdf已经有了。

演示代码:

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

最新更新