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

时间:2014-04-25 07:57:58

标签: php utf-8 tcpdf

我尝试使用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。如何解决这个问题

3 个答案:

答案 0 :(得分:2)

1)字体 首先,我将我的Windows8“Times new roman”fonr从c:\ windows \ fonts复制到名为“tnr”的tcpdf / fonts下的临时目录。有4个文件“times.ttf”,“timesbi.ttf”,“timesbd.ttf”,“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');
?>

答案 1 :(得分:1)

我在使用波兰语字符时遇到了类似问题,但只能使用firefox pdf浏览器。

试试这个:

$pdf->setFontSubsetting(false);

修改

我检查了你的示例数据.. setFontSubsetting无效(如你所说):(

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

例如:

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

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

和其他字体:freesans,dejavuserifi,freeserif,但不是'次'。

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

    $type='TrueTypeUnicode';

(查看tcpdf / fonts / freesans.php)

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

您是否尝试过“时代”?: Creating PDFs using TCPDF that supports all languages especially CJK

修改

我从上面链接测试了解决方案..

我的步骤:

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

    ttf2ufm -a -F times.ttf
    
  3.     php -q makefont.php times.ttf times.ufm
    

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

    1. 将新文件:times.ctg.z,times.php,times.t1a,times.z复制到tcpdf / fonts
    2. 运行脚本:

          // 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');
      

      这对我很有用:))

答案 2 :(得分:0)

我也遇到了这个问题。我使用dejavusans字体的方式是使用dejavusans字体,因为字体是为utf8 unicode而设计的,tcpdf已经使用了它。

演示代码:

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