Bou*_*nce 25 php pdf pdf-generation utf-8 tcpdf
我使用最新的TCPDF版本(5.9).但编码有一些奇怪的问题.我需要立陶宛语符号,如:ąčęėįšųūž.但只获得少数.其他仍然像????? 所以我该怎么做 ?我使用默认时间字体(它附带TCPDF下载).
任何帮助,将不胜感激.
小智 30
使用utf8,TCPDF非常棘手.实现您想要的最佳方法是将字体嵌入生成的PDF文件本身.您可以使用TCPDF包中的freeserif字体,它包含所有utf8符号,绝对显示任何语言的任何字符,但会在输出文件中添加~700kb.如果文件大小无关紧要,这可能是获取所需符号的最简单方法.
您还可以制作自己的嵌入字体,其中包含您需要的字符.这可能是最好的解决方案,保持通用和小尺寸,但更复杂.
或者,您可以继续使用从系统中获取的核心字体,如果未找到,则替换为替换.这使输出文件非常轻,但增加了字体子集的必要性,以获得异国情调的字符.就个人而言,我还没有取得成功,所以我仍然认为嵌入字体是最好的解决方案,这也恰好更具普遍性.
Eli*_*isa 14
将$unicodeTCPDF构造函数的参数设置为false和$encoding参数'ISO-8859-1'或其他一些字符映射.
这将有助于您:
UTF-8 unicode的默认值:
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
Run Code Online (Sandbox Code Playgroud)
欧洲字符集的构造函数示例:
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, false, 'ISO-8859-1', false);
Run Code Online (Sandbox Code Playgroud)
Lau*_*kas 12
CPDF核心字体中包含一种字体 - dejavusans,它显示所有立陶宛字符.只需添加以下内容:
$pdf->setHeaderFont(Array('dejavusans', '', 10, '', false));
$pdf->setFooterFont(Array('dejavusans', '', 8, '', false));
$pdf->SetFont('dejavusans', '', 10, '', false);
Run Code Online (Sandbox Code Playgroud)
小智 9
在尝试使用默认的Helvetica字体渲染罗马尼亚文本时,发现了同样的情况.在进行一些调查时,我发现tcpdf库将它的默认字体(称为"核心"字体)视为Latin1字符,所以即使你告诉它使用UTF-8编码并设置unicode标志,它也会直接翻译你的文字在渲染之前为Latin1等价物.如果它找到Latin1等价物,则库的默认行为是翻译它可以找到等价物的每个字符,否则它将字符翻译为"?".
这可以在以下方法链的TCPDF类中找到:
Write()- > Cell()- > getCellCode()- > _escapetext().
在里面_escapetext()你可以看到它正在检查$this->isunicode然后检查所选字体以查看它的类型是否为核心| TrueType | Type1.如果是的话,它将通过该UTF8ToLatin1()方法将字符串"latinize"给你.这是'?'的地方 翻译正在进行中.
我的建议是使用类似于你所使用的默认字体的自定义unicode字体(如Deja Vu Sans).在我目前的情况下,这对我有用.
小智 9
将字体设置为freeserif它将起作用.我测试过了.
$pdf->SetFont('freeserif', '', 14, '', true);
Run Code Online (Sandbox Code Playgroud)
小智 8
要将TCPDF与฿,포等特殊字符 一起使用,您需要使用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);
这将创建如下字体:
application/libraries/tcpdf/fonts/arialuni.ctg.z
application/libraries/tcpdf/fonts/arialuni.php
application/libraries/tcpdf/fonts/arialuni.z
现在您可以使用以下命令设置新字体:$ pdf-> SetFont('arialuni','',10.5);
现在你可以使用像฿等特殊的unicode字符....
资料来源:http: //myridia.com/dev_posts/view/852
小智 5
您在从数据库中读取像Karn\xc4\x81taka这样的字符并像这样显示时 遇到问题karn?taka 我的意思是“?” 我们不希望这样做,然后执行以下操作:
\n\n定义连接的字符集 ( mysql_set_charset()):
$con = mysql_connect("localhost","root","");\n\nif (!$con)\n{\n die(\'Could not connect: \' . mysql_error());\n}\nmysql_select_db("database_name", $con) or die(mysql_error());\nmysql_set_charset(\'utf8\',$con);\nRun Code Online (Sandbox Code Playgroud)使用 $pdf->SetFont(\'DejaVuSerif\', \'\', 10);而不是$pdf->SetFont(\'helvetica\', \'B\', 12);