我使用最新的TCPDF版本(5.9)。但编码有一些奇怪的问题。我需要立陶宛语符号,如:ąčęėįšųūž。但只获得少数。其他仍然像????? 所以我该怎么做 ?我使用默认时间字体(它附带TCPDF下载)。
任何帮助都将不胜感激。
答案 0 :(得分:29)
您还可以制作自己的嵌入字体,其中包含您需要的字符。这可能是最好的解决方案,保持通用和小尺寸,但更复杂。
或者,您可以转发从系统中获取的核心字体,如果未找到,则替换为替换。这使输出文件非常轻,但增加了字体子集的必要性,以获得异国情调的字符。就个人而言,我还没有取得成功,所以我仍然认为嵌入字体是最好的解决方案,这也恰好更具普遍性。
答案 1 :(得分:14)
将TCPDF构造函数的$unicode
参数设置为false
,将$encoding
参数设置为'ISO-8859-1'
或其他一些字符映射。
This会帮助您:
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);
答案 2 :(得分:11)
CPDF核心字体中包含一种字体 - dejavusans,它显示所有立陶宛字符。只需添加以下内容:
$pdf->setHeaderFont(Array('dejavusans', '', 10, '', false));
$pdf->setFooterFont(Array('dejavusans', '', 8, '', false));
$pdf->SetFont('dejavusans', '', 10, '', false);
答案 3 :(得分: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)。在我目前的情况下,这对我有用。
答案 4 :(得分: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);
这将创建如下字体:
应用/库/ TCPDF /字体/ arialuni.ctg.z
应用程序/库/ TCPDF /字体/ arialuni.php
应用/库/ TCPDF /字体/ arialuni.z
现在您可以设置新字体: $ pdf-> SetFont('arialuni','',10.5);
现在您可以使用฿等特殊的unicode字符....
答案 5 :(得分:8)
将字体设置为freeserif它将起作用。 我测试了。
$pdf->SetFont('freeserif', '', 14, '', true);
答案 6 :(得分:4)
你有从数据库中读取像Karnātaka这样的字符的问题并且像这样显示 karn?taka 我的意思是“?”然后不要做以下事情:
定义连接的charset(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);
答案 7 :(得分:3)
IIRC,您可以在创建新字体as described here时定义编码。否则,您必须使用创建字体时定义的编码。听起来像TCPDF附带的字体都使用WinAnsiEncoding ... a.k.a.代码页1252.
笨重但有效。
答案 8 :(得分:2)
对我来说这是一个字体问题。我使用了字体times
,我的本地多字节chras无法正常显示。当我将其更改为freeserif
时,它们正常工作:)
答案 9 :(得分:2)
使用dejavusans字体,它适用于俄语和拉脱维亚语字母。
答案 10 :(得分:1)
默认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);
答案 11 :(得分:0)
为此,请使用以下参数TCPDF构造函数
的代码$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, false, 'ISO-8859-1', false);
它会帮助你。
答案 12 :(得分:0)
$fontname = $pdf->addTTFfont('C:\xampp\htdocs\copyshop\fonts\07-TH-Sarabun-PSK\THSarabun.ttf', 'TrueTypeUnicode', '', 32);
$pdf->SetFont($fontname, '', 16,'',FALSE); //Working
答案 13 :(得分:0)
我对罗马尼亚字符有同样的问题,问题不是编码, LC_CTYPE 或来自 TCPDF 的其他设置,而是我使用的字体。 我提到我使用了带有Courier字体的TWIG模板。 您可以尝试将字体更改为 freeserif
答案 14 :(得分:0)
更改字体以正常显示₹和立陶宛符号
$pdf->SetFont('cid0cs', '', 12);