PHP TCPDF/FPDF库泰米尔语字体渲染异常问题求助
泰米尔语PHP生成PDF字体渲染问题解决方案
问题根源
渲染异常核心有两个原因:
- 当前使用的
freeserif字体无完整泰米尔语字符集支持 - TCPDF默认对泰米尔语这类带连写规则的复杂文字渲染适配不足,且你之前试用的Baamini属于非Unicode编码字体,仅映射泰米尔语字符,没有内置英文字符集
解决方案一:TCPDF适配方案
1. 选对字体
优先选用Noto Sans Tamil字体,属于Unicode编码字体,同时内置完整泰米尔语、英文字符集,完全满足双语同时渲染需求。
2. 导入字体到TCPDF
- 下载
NotoSansTamil-Regular.ttf字体文件,放到TCPDF根目录下的fonts文件夹中 - 运行TCPDF自带的字体导入工具生成配置文件:进入TCPDF的
tools目录,执行命令
php tcpdf_addfont.php -i ../fonts/NotoSansTamil-Regular.ttf
执行完成后会自动在fonts目录生成对应的字体配置文件,可直接调用。
3. 修改测试代码
修改后的代码如下:
<?php header('Content-type: text/html; charset=UTF-8'); require_once('tcpdf_include.php'); // 创建PDF实例,开启UTF-8支持 $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); // 关闭字体子集化避免字符丢失 $pdf->setFontSubsetting(false); // 切换为导入的Noto Sans Tamil字体 $pdf->SetFont('notosanstamil', '', 12); $pdf->AddPage(); $utf8text = '<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> </head> <body> <p>தினமும் உங்களை இந்த தோட்டத்து வழியாக செல்லும்போது என்னை கவனிப்பீர்களா என்று திரும்பி திரும்பி பார்த்து செல்வேன். ஆனால் நீங்களோ வெறி பிடித்தது போல் மண்ணை கொத்தி கொண்டிருப்பீர்கள்.</p></body></html>'; $pdf->writeHTML($utf8text, true, 0, true, true); $pdf->Output('example_067.pdf', 'I'); ?>
解决方案二:改用mPDF库(更推荐)
mPDF天生对南亚语系复杂连写规则的适配远好于TCPDF,泰米尔语渲染无需额外复杂配置,仅需导入对应字体即可:
- 用composer安装mPDF:
composer require mpdf/mpdf - 测试代码如下:
<?php require_once __DIR__ . '/vendor/autoload.php'; $mpdf = new \Mpdf\Mpdf([ 'default_font_size' => 12, 'default_font' => 'notosanstamil', 'fontdata' => [ 'notosanstamil' => [ 'R' => 'NotoSansTamil-Regular.ttf', ] ], 'mode' => 'UTF-8' ]); $utf8text = '<p>தினமும் உங்களை இந்த தோட்டத்து வழியாக செல்லும்போது என்னை கவனிப்பீர்களா என்று திரும்பி திரும்பி பார்த்து செல்வேன். ஆனால் நீங்களோ வெறி பிடித்தது போல் மண்ணை கொத்தி கொண்டிருப்பீர்கள்.</p>'; $mpdf->WriteHTML($utf8text); $mpdf->Output(); ?>
内容的提问来源于stack exchange,提问作者Annamalai
相关产品推荐
相关产品推荐

