You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TCPDF(PHP)生成PDF文件时德语特殊字符显示异常问题问询

问题描述

我在使用PHP的TCPDF类库生成PDF文件时,德语字符无法正常显示,使用的代码如下:

<?php
// Load autoloader (using Composer)
require __DIR__ . '/vendor/autoload.php';
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);    
$pdf->SetPrintHeader(false);
$pdf->AddPage();
// create some HTML content
$html = '<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
                Die angeführten Preise sind Fixpreise für eine schlüsselfertige Ausführung gemäß Leistungsbeschreibung und Ausstattungsliste
                und gelten bei einem Vertragsabschluss bis 31.12.2021.<br/>
                Die m²-Angaben sind Cirka-Maße. Geringfügige Abweichungen sind möglich und auf Grundrissvarianten oder technische
                Änderungen, behördliche Vorschriften etc. zurückzuführen.<br/>
                In den oben genannten Preisen sind sämtliche in vorliegender Preisliste angeführten Kaufnebenkosten (mit Ausnahme der
                Beglaubigungskosten und Barauslagen im Zusammenhang mit der Eintragung im Grundbuch) enthalten, der Verkauf erfolgt
                provisionsfrei direkt vom Bauträger. Kosten im Zusammenhang mit der Finanzierung (insbesondere auch Kosten für die
                Bankgarantie) sind von der Käuferseite zu tragen.
      
</body>
</html>';
$pdf->writeHTML(utf8_encode($html), true, false, true, false, '');
$pdf->lastPage();
$lastPage = $pdf->getPage();
$pdf->Output('generated.pdf', 'I');

生成的PDF文件显示效果如下:
PDF显示效果
对应的原始HTML页面中所有字符显示均正常,效果如下:
HTML显示效果


解决方案
  • 移除重复转码逻辑
    $html本身已经是UTF-8编码,utf8_encode()仅适用于将ISO-8859-1编码的内容转换为UTF-8,对已经是UTF-8的内容调用该函数会导致编码异常,直接触发德语特殊字符乱码。直接将writeHTML方法的第一个参数改为$html即可。
  • 设置支持Unicode的字体
    TCPDF默认字体可能未包含德语变音符号、ß等特殊字符的字形,需要在添加页面前设置支持西欧字符的Unicode字体,比如TCPDF默认自带的dejavusans字体,对欧洲语言字符兼容性极好。
修改后的完整代码
<?php
// 加载Composer自动加载文件
require __DIR__ . '/vendor/autoload.php';
// 初始化TCPDF时已开启UTF-8支持,参数配置正确
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);    
$pdf->SetPrintHeader(false);
// 设置支持德语特殊字符的字体,字号可根据需求调整
$pdf->SetFont('dejavusans', '', 10);
$pdf->AddPage();
// HTML内容保持不变,本身已是UTF-8编码,lang属性改为de为可选优化项
$html = '<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
                Die angeführten Preise sind Fixpreise für eine schlüsselfertige Ausführung gemäß Leistungsbeschreibung und Ausstattungsliste
                und gelten bei einem Vertragsabschluss bis 31.12.2021.<br/>
                Die m²-Angaben sind Cirka-Maße. Geringfügige Abweichungen sind möglich und auf Grundrissvarianten oder technische
                Änderungen, behördliche Vorschriften etc. zurückzuführen.<br/>
                In den oben genannten Preisen sind sämtliche in vorliegender Preisliste angeführten Kaufnebenkosten (mit Ausnahme der
                Beglaubigungskosten und Barauslagen im Zusammenhang mit der Eintragung im Grundbuch) enthalten, der Verkauf erfolgt
                provisionsfrei direkt vom Bauträger. Kosten im Zusammenhang mit der Finanzierung (insbesondere auch Kosten für die
                Bankgarantie) sind von der Käuferseite zu tragen.
      
</body>
</html>';
// 移除utf8_encode调用
$pdf->writeHTML($html, true, false, true, false, '');
$pdf->lastPage();
$lastPage = $pdf->getPage();
$pdf->Output('generated.pdf', 'I');

内容的提问来源于stack exchange,提问作者Danyal Sandeelo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 13:18:05