我试图用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
编辑
我测试了上面链接的解决方案。。
我的步骤:
- 将时间.ttf从windows字体目录复制到tcpdf/fonts/utils
在同一目录中,从命令行运行:
ttf2ufm -a -F times.ttf
和
php -q makefont.php times.ttf times.ufm
注意:此工具在"min"版本的TCPDF中不可用。
- 将新文件: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);