TCPDF UTF-8。立陶宛符号未显示

| 我正在使用最新的TCPDF版本(5.9)。但是在编码方面存在一些奇怪的问题。我需要立陶宛语符号,例如:ččęėįšųūž。但是只得到其中的一部分。其他保持像????? 所以我该怎么做 ?我使用默认时间字体(TCPDF下载随附)。 任何帮助,将不胜感激。     
已邀请:
将TCPDF构造函数上的
$unicode
参数设置为
false
,并将
$encoding
参数设置为
\'ISO-8859-1\'
或其他字符映射。 这将帮助您: UTF-8 Unicode的默认值:
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, \'UTF-8\', false);
欧洲字符集的构造函数示例:
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, false, \'ISO-8859-1\', false);
    
TCPDF在utf8中非常棘手。实现您想要的最佳方法是将字体嵌入生成的PDF文件本身。您可以使用TCPDF软件包中的freeserif字体,它包含所有utf8符号,绝对显示任何语言的任何字符,但会在输出文件中添加〜700kb。如果文件大小无关紧要,那可能是获取所需符号的最简单方法。 您还可以制作自己的字体来嵌入,其中包含所需的字符。这可能是最好的解决方案,使其具有通用性和较小的尺寸,但是更加复杂。 或者,您可以中继取自系统的核心字体,如果找不到,则用替代字体替换。这使输出文件非常轻巧,但是增加了字体子集获取异类字符的必要性。我个人还没有成功,所以我仍然认为嵌入字体是最好的解决方案,而且碰巧也更通用。     
CPDF核心字体中包含一种字体-dejavusans,它显示所有立陶宛语字符。只需添加以下内容:
$pdf->setHeaderFont(Array(\'dejavusans\', \'\', 10, \'\', false));
$pdf->setFooterFont(Array(\'dejavusans\', \'\', 8, \'\', false));
$pdf->SetFont(\'dejavusans\', \'\', 10, \'\', false);
    
刚尝试使用默认的Helvetica字体渲染罗马尼亚文字时,就发现了这种情况。在进行调查时,我发现tcpdf库将其默认字体(称为\“ core \”字体)视为Latin1字符,因此即使您告诉它使用UTF-8编码并设置unicode标志,它会在渲染之前将您的文本原样翻译为Latin1等效项。库的默认行为是,如果找到与Latin1等效的字符,则转换它可以找到与之等效的每个字符,否则它将把字符转换为\'?\'。 可以在以下方法链的TCPDF类中找到它:
Write()
->
Cell()
->
getCellCode()
->
_escapetext()
。 在
_escapetext()
内部,您会看到它正在检查
$this->isunicode
,然后检查所选字体以查看其类型是否为core | TrueType | Type1。如果是的话,它将通过
UTF8ToLatin1()
方法为您提供一个字符串“ \ latinize \”。这就是\'?\'翻译发生的地方。 我的建议是使用类似于您所使用的默认字体的自定义unicode字体(例如Deja Vu Sans)。在我目前的情况下,这对我有用。     
将字体设置为freeserif即可使用。 我测试了
$pdf->SetFont(\'freeserif\', \'\', 14, \'\', true);
    
要将TCPDF与special,포或其他特殊字符一起使用 您需要使用unicode字体: 在此处下载字体: ftp://ftp.fu-berlin.de/unix/X11/multimedia/MPlayer/contrib/fonts/arialuni.ttf.bz2 创建一个测试pdf文件并将此字体加载到TCPDF中 例:
$fontname = $pdf->addTTFfont(\'/var/www/app/images/fonts/arialuni.ttf\', \'TrueTypeUnicode\', \'\', 32);
这将创建如下字体:   应用程序/库/tcpdf/fonts/arialuni.ctg.z   应用程序/库/tcpdf/fonts/arialuni.php   应用程序/库/tcpdf/fonts/arialuni.z 现在您可以使用设置新字体: $ pdf-> SetFont(\'arialuni \',\'\',10.5); 现在您可以使用特殊的Unicode字符,例如฿等。 资源 : http://myridia.com/dev_posts/view/852     
您有问题要从数据库中读取类似Karnātaka的字符并显示此类karn?taka,我的意思是\“?\”,我们不希望这样做,然后执行以下操作: 定义连接的字符集(
mysql_set_charset()
):
$con = mysql_connect(\"localhost\",\"root\",\"\");

if (!$con)
{
    die(\'Could not connect: \' . mysql_error());
}
mysql_select_db(\"database_name\", $con) or die(mysql_error());
mysql_set_charset(\'utf8\',$con);
使用
$pdf->SetFont(\'DejaVuSerif\', \'\', 10);
代替
$pdf->SetFont(\'helvetica\', \'B\', 12);
对于PHP的TCPDF库,从数据库中读取像Rājasthān这样的字符,而不是R?jasth?n     
IIRC,您可以在创建新字体时定义编码,如此处所述。否则,您必须使用创建字体时定义的编码。听起来像TCPDF附带的字体都使用WinAnsiEncoding ...又称代码页1252。 笨拙,但有效。     
对我来说,这是一个字体问题。我使用的字体是ѭ20,我的本地多字节chras无法正确显示。当我将其更改为
freeserif
时,它们可以正常工作:)     
使用dejavusans字体,它对于俄语和拉脱维亚字母都可以正常工作。     
在默认的TCPDF软件包中,经过测试的dejavusans和freeserif以及两种字体都可以使用立陶宛语字符。我还输入了一些俄语字符,它们也起作用。我使用以下代码对其进行了测试:
$this->pdf = new \\TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, \'UTF-8\', false); 
$this->pdf->AddPage();
$this->pdf->SetFont(\'dejavusans\', \'B\', 20); // UTF8 fonts with lithuanian support: freeserif, dejavusans
$this->pdf->Write(0, \'ąžūčšęėųįĄŽŪČŠĘĖŲĮ Превед Кросавчег!\', \'\', 0, \'C\', true, 0, false, false, 0);
    
为此,请使用以下参数TCPDF构造函数的代码
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, false, \'ISO-8859-1\', false);
它会帮助你。     
$fontname = $pdf->addTTFfont(\'C:\\xampp\\htdocs\\copyshop\\fonts\\07-TH-Sarabun-PSK\\THSarabun.ttf\', \'TrueTypeUnicode\', \'\', 32);
    $pdf->SetFont($fontname, \'\', 16,\'\',FALSE); //Working
    
我对罗马尼亚字符有同样的问题,问题不在于编码,LC_CTYPE或TCPDF中的其他设置,而是我使用的字体。 我提到我使用了带有Courier字体的TWIG模板。 您可以尝试将字体更改为freeserif     
更改字体以正常显示₹和立陶宛符号
$pdf->SetFont(\'cid0cs\', \'\', 12);
    

要回复问题请先登录注册