关于tcpdf生成PDF文档 无法正常编码emoji表情求助
这几天遇到一个棘手的问题,简单分析下如下:
1.需要生成pdf的测试html文本:
可以显示❌😉眨眼表😊面带微笑的眼睛 😋品尝美味食物表情 😎太阳镜笑脸 😍面带心形眼睛 😘飞吻表情 😗亲吻表情 😙含笑亲吻表情 😚闭眼亲吻表情 😇光环笑脸 😐中性面 😑面无表情 😶没有嘴的脸 😏
2.能考虑到的是tcpdf生成的时候是根据字体来生成的,可能自带的字体是没有办法支持emoji表情,所以我找了Apple Color Emoji、Segoe UI这俩都支持emjio比较全,因为这个库好像不能支持指定多个字体自动识别,我就使用字体编辑工具把三套字体都合并成一个ttf,使用tcpdf的字体转换tool工具转换字体,但是发现可能字体有些部分确实有但是可能编码不一致无法识别到对应的表情字体,但是发现❌这个符号是可以识别出来的。
附带php代码:
// 自动加载Composer的类
require_once $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'utf-8', false);
// 设置文档信息
$title = extractTitleFromHtml($htmlContent);
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor("System");
$pdf->SetTitle($title);
$pdf->SetSubject("{$title} - PDF导出");
// 禁用页眉页脚
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
// 1. 添加并注册字体(假设你已添加)
$mainFont = 'yaheiemjio'; // TCPDF内置中文字体,或你添加的字体名
// $emojiFont = 'yaheiemjio'; // 添加的Emoji字体
$lg['a_meta_charset'] = 'UTF-8';
$pdf->setLanguageArray($lg);
// 添加中文支持
// $pdf->SetFont($mainFont, '', $fontSize, '', true);
$pdf->SetFont($mainFont, '', $fontSize);
$pdf->setFontSubsetting(true);
// 添加页面
$pdf->AddPage();
// 处理HTML中的相对路径
$baseUrl = 'http://' . ($_SERVER['HTTP_HOST'] ?? 'localhost') . '/';
$processedHtml = processHtmlForPdf($htmlContent, $baseUrl);
// 写入HTML内容,指定使用中文字体
$pdf->writeHTML($processedHtml, true, false, true, false, '');
// 直接输出PDF
$pdf->Output($safeFilename, 'I');
3.不局限于tcpdf库,我也试过mpdf、dompdf,很多php能转pdf的库我都试过了,都是无法正常转换emoji表情,后面自己使用的node来转换的,但是甲方爸爸就是要用php,这个比较麻烦。特来求助,看看大佬们都有没有遇到相似问题,感激不尽。
关于 LearnKu
应该是字体的关系。
wkhtmltopdf,我经常用这个,可以试试