TCPDF UTF-8.立陶宛符号没有出现

Bou*_*nce 25 php pdf pdf-generation utf-8 tcpdf

我使用最新的TCPDF版本(5.9).但编码有一些奇怪的问题.我需要立陶宛语符号,如:ąčęėįšųūž.但只获得少数.其他仍然像????? 所以我该怎么做 ?我使用默认时间字体(它附带TCPDF下载).

任何帮助,将不胜感激.

小智 30

使用utf8,TCPDF非常棘手.实现您想要的最佳方法是将字体嵌入生成的PDF文件本身.您可以使用TCPDF包中的freeserif字体,它包含所有utf8符号,绝对显示任何语言的任何字符,但会在输出文件中添加~700kb.如果文件大小无关紧要,这可能是获取所需符号的最简单方法.

您还可以制作自己的嵌入字体,其中包含您需要的字符.这可能是最好的解决方案,保持通用和小尺寸,但更复杂.

或者,您可以继续使用从系统中获取的核心字体,如果未找到,则替换为替换.这使输出文件非常轻,但增加了字体子集的必要性,以获得异国情调的字符.就个人而言,我还没有取得成功,所以我仍然认为嵌入字体是最好的解决方案,这也恰好更具普遍性.

  • Freesans也帮助了我.非常感谢!另外,我想补充一点,'freesans'字体应该用PHP($ pdf-> SetFont('freesans'))和HTML设置,如果你尝试打印表格,就像我一样.只需添加'style'属性,如下所示:<td style ="font-family:freesans;"> ... </ td>帮我显示一些捷克字符. (6认同)

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).在我目前的情况下,这对我有用.

  • 是的,'dejavusans'字体和它的工作原理:D (2认同)
  • 或者'freesans'也是:) (2认同)

小智 9

将字体设置为freeserif它将起作用.我测试过了.

$pdf->SetFont('freeserif', '', 14, '', true);
Run Code Online (Sandbox Code Playgroud)


小智 8

要将TCPDF与฿,포等特殊字符 一起使用,您需要使用unicode字体:

  1. 在这里下载字体:ftp: //ftp.fu-berlin.de/unix/X11/multimedia/MPlayer/contrib/fonts/arialuni.ttf.bz2

  2. 创建一个测试pdf文件并将此字体加载到TCPDF示例中:

    $fontname = $pdf->addTTFfont('/var/www/app/images/fonts/arialuni.ttf', 'TrueTypeUnicode', '', 32);

  3. 这将创建如下字体:

    application/libraries/tcpdf/fonts/arialuni.ctg.z
    application/libraries/tcpdf/fonts/arialuni.php
    application/libraries/tcpdf/fonts/arialuni.z

  4. 现在您可以使用以下命令设置新字体:$ pdf-> SetFont('arialuni','',10.5);

  5. 现在你可以使用像฿等特殊的unicode字符....

资料来源:http: //myridia.com/dev_posts/view/852


小智 5

您在从数据库中读取像Karn\xc4\x81taka这样的字符并像这样显示时 遇到问题karn?taka 我的意思是“?” 我们不希望这样做,然后执行以下操作:

\n\n
    \n
  1. 定义连接的字符集 ( mysql_set_charset()):

    \n\n
    $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);\n
    Run Code Online (Sandbox Code Playgroud)
  2. \n
  3. 使用 $pdf->SetFont(\'DejaVuSerif\', \'\', 10);而不是$pdf->SetFont(\'helvetica\', \'B\', 12);

    \n\n
      \n
    • 对于 PHP 的 TCPDF 库,从数据库中读取R\xc4\x81jasth\xc4\x81n等字符,而不是R?jasth?n
    • \n
  4. \n
\n