Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php TCPDF UTF-8。立陶宛符号没有出现_Php_Pdf_Utf 8_Pdf Generation_Tcpdf - Fatal编程技术网

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

Php TCPDF UTF-8。立陶宛符号没有出现,php,pdf,utf-8,pdf-generation,tcpdf,Php,Pdf,Utf 8,Pdf Generation,Tcpdf,Im使用最新的TCPDF版本(5.9)。但是在编码方面有一些奇怪的问题。我需要立陶宛语符号,比如:ąęėįųūž。但是只得到很少的一部分。其他人仍然像????? 那我该怎么办?我使用默认的times字体(TCPDF下载时附带) 任何帮助都将不胜感激。IIRC,您可以在创建新字体时定义编码。否则,必须使用创建字体时定义的编码。听起来像是TCPDF附带的字体都使用WinAncienceODing。。。a、 k.a.代码第1252页 笨重但有效。将TCPDF构造函数上的$unicode参数设置为fal

Im使用最新的TCPDF版本(5.9)。但是在编码方面有一些奇怪的问题。我需要立陶宛语符号,比如:ąęėįųūž。但是只得到很少的一部分。其他人仍然像????? 那我该怎么办?我使用默认的times字体(TCPDF下载时附带)


任何帮助都将不胜感激。

IIRC,您可以在创建新字体时定义编码。否则,必须使用创建字体时定义的编码。听起来像是TCPDF附带的字体都使用WinAncienceODing。。。a、 k.a.代码第1252页


笨重但有效。

将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。如果文件大小无关紧要,那么这可能是获取所需符号的最简单方法

你也可以制作自己的字体来嵌入,包含你需要的字符。这可能是最好的解决方案,保持它的通用性和小型化,但更为复杂


或者,您可以使用从系统中获取的核心字体,如果找不到,则替换为替代字体。这使得输出文件非常轻,但增加了字体子集的必要性,以获得外来字符。就个人而言,我在这方面还没有取得成功,所以我仍然认为嵌入字体是最好的解决方案,这也恰好更通用。

为此,请使用参数TCPDF构造函数的以下代码

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, false, 'ISO-8859-1', false);

这将对您有所帮助。

在尝试使用默认Helvetica字体呈现罗马尼亚文本时发现了同样的情况。在做一些调查时,我发现tcpdf库将其默认字体(称为“核心”字体)视为拉丁文字符,因此即使您告诉它使用UTF-8编码并设置unicode标志,它也会在渲染之前将您的文本翻译为拉丁文。库的默认行为是,如果它找到了拉丁文1的等价物,则翻译它可以找到的等价物的每个字符,否则它将字符翻译为“?”

这可以在以下方法链中的TCPDF类中找到:
Write()
->
Cell()
->
getCellCode()
->
\u escapetext()

\u escapetext()
的内部,您可以看到它正在检查
$this->isunicode
,然后检查所选字体的类型是否为core | TrueType | Type1。如果是,它将通过
UTF8ToLatin1()
方法将字符串“拉丁化”。这就是进行“?”翻译的地方


我的建议是使用自定义unicode字体(如Deja-Vu-Sans),该字体类似于您所追求的默认字体。在我目前的情况下,这对我很有效。

对我来说,这是一个字体问题。我使用了字体
,本地多字节chra无法正确显示。当我将其更改为
freeerif
时,它们工作正常:)

您无法从数据库中读取像Karnātaka这样的字符并显示Karn?taka我的意思是“?”,我们不希望这样做,然后执行以下操作:

  • 为连接定义字符集(
    mysql\u set\u charset()
    ):

  • 使用
    $pdf->SetFont('DejaVuSerif','',10)而不是
    $pdf->SetFont('helvetica','B',12)

    • 对于PHP的TCPDF库,从数据库中读取字符Rājasthān,而不是R?jasth?n

  • 使用dejavusans字体,它可以很好地处理俄语和拉脱维亚字母。

    CPDF核心字体中包含一种字体-dejavusans,它显示所有立陶宛字符。只需添加以下内容:

    $pdf->setHeaderFont(Array('dejavusans', '', 10, '', false));
    $pdf->setFooterFont(Array('dejavusans', '', 8, '', false));
    $pdf->SetFont('dejavusans', '', 10, '', false);
    

    使用默认的TCPDF软件包测试dejavusansfreeserif,两种字体都可以使用立陶宛字符。我还打了几个俄文字符,它们也很管用。我使用此代码对其进行了测试:

    $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与฿等特殊字符一起使用,포 或其他人 您需要使用unicode字体:

  • 下载此处的字体:

  • 创建一个测试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字符,如฿等

  • 资料来源:

    将字体设置为freeseri,这样它就可以工作了。 我做了测试

    $pdf->SetFont('freeserif', '', 14, '', true);
    

    我对罗马尼亚字符也有同样的问题,问题不是编码、LC_CTYPE或TCPDF中的其他设置,而是我使用的字体。 我提到我使用了带有Courier字体的TWIG模板。
    您可以尝试将字体更改为“freeserif”

    将字体更改为正常显示₹ 和立陶宛符号

    $pdf->SetFont('cid0cs', '', 12);
    

    生成的PDF文档的编码为ANSI。这些信息显示PDF阅读器。但这怎么可能呢?我在我的代码中定义,编码是UTF-8…我可以确认这就是我如何使其适用于罗马尼亚字符的。我试着用几种方法生成Arial(ttf),但最终失败了。它起作用了
    $fontname = $pdf->addTTFfont('C:\xampp\htdocs\copyshop\fonts\07-TH-Sarabun-PSK\THSarabun.ttf', 'TrueTypeUnicode', '', 32);
        $pdf->SetFont($fontname, '', 16,'',FALSE); //Working
    
    $pdf->SetFont('cid0cs', '', 12);