我尝试使用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
。如何解决这个问题
答案 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
修改强>
我从上面链接测试了解决方案..
我的步骤:
在同一目录中,从命令行运行:
ttf2ufm -a -F times.ttf
和
php -q makefont.php times.ttf times.ufm
注意:此工具在“min”版本的TCPDF中不可用。
运行脚本:
// 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);