TCPDF UTF-8. Литовские символы не появляются

Я использую последнюю версию TCPDF (5.9). Но есть некоторые странные проблемы с кодировкой. Мне нужны символы литовского языка, такие как: ąčęėįšųūž. Но получайте только немного. Другие остаются похожими на ????? И что же мне делать ? Я использую шрифт по умолчанию (он поставляется с загрузкой TCPDF).

Любая помощь будет оценена по достоинству.

Задайте параметр $unicode в конструкторе TCPDF равным false а параметр $encoding'ISO-8859-1' или некоторую другую карту символов.

Это поможет вам:

По умолчанию для Unicode UTF-8:

 $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. Вы можете использовать шрифт freeserif из пакета TCPDF, он содержит все символы utf8, показывает абсолютно любой символ любого языка, но добавляет ~ 700 кб в выходной файл. Это, наверное, самый простой способ получить символы, которые вам нужны, если размер файла не имеет значения.

Вы также можете создать свой собственный шрифт для вставки, содержащий нужные вам символы. Это, пожалуй, лучшее решение, сохраняя его универсальным и небольшим по размеру, но более сложным.

Кроме того, вы можете ретранслировать на основные шрифты, которые берутся из системы, а если они не найдены, заменяются на замену. Это делает выходной файл чрезвычайно легким, но добавляет необходимость подмножества шрифтов для получения экзотических символов. Лично я не имел успеха с этим, поэтому я все еще думаю, что встраивание шрифта – лучшее решение, которое также оказывается более универсальным ..

Просто обнаружил эту ситуацию при попытке сделать румынский текст с использованием шрифта Helvetica по умолчанию. Проводя некоторое исследование, я обнаружил, что библиотека tcpdf рассматривает шрифты по умолчанию (называемые «основными» шрифтами) как символы Latin1, поэтому, даже если вы сообщите ему использовать кодировку UTF-8 и установите флаг Unicode, она буквально переведет ваш текст до эквивалентов Latin1 до рендеринга. Поведение библиотеки по умолчанию, если оно находит эквивалент Latin1, переводит каждый символ, чтобы он мог найти эквивалент, иначе он переводит символ как «?».

Это можно найти внутри класса TCPDF в следующей цепочке методов: Write() -> Cell() -> getCellCode() -> _escapetext() .

Внутри _escapetext() вы можете увидеть, что он проверяет $this->isunicode затем проверяет выбранный шрифт, чтобы увидеть, является ли его тип ключевым | TrueType | Type1 . Если это так, то для него потребуется строка «latinize» для вас с помощью метода UTF8ToLatin1() . Это где? переводы происходят.

Моя рекомендация заключалась бы в использовании пользовательского шрифта unicode (например, Deja Vu Sans), который похож на шрифт по умолчанию, который вы используете. Это работало для меня в моей нынешней ситуации.

есть шрифт, включенный в основные шрифты CPDF – dejavusans, он отображает все литовские персонажи. Просто добавьте следующее:

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

Чтобы использовать 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. это создаст такие шрифты, как:

    приложение / библиотеки / TCPDF / шрифты / arialuni.ctg.z
    приложение / библиотеки / TCPDF / шрифты / arialuni.php
    приложение / библиотеки / TCPDF / шрифты / arialuni.z

  4. теперь вы можете установить новый шрифт с помощью: $ pdf-> SetFont ('arialuni', '', 10.5);

  5. и теперь вы можете использовать специальные символы Unicode, такие как ฿ и многое другое ….

Источник: http://myridia.com/dev_posts/view/852

Установите шрифт в freeserif, и он будет работать. Я тестировал.

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

У вас есть проблема, чтобы читать такого персонажа, как Karnātaka, из базы данных и показывать, как этот karn? Taka. Я имею в виду «?» которые мы не хотим, то делаем следующее:

  1. Определите кодировку для соединения ( 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); 
  2. Используйте $pdf->SetFont('DejaVuSerif', '', 10); вместо $pdf->SetFont('helvetica', 'B', 12);

    • Для библиотеки TCPDF PHP читайте символ, например, Rājasthān вместо R? Jasth? N из базы данных

IIRC, вы можете определить кодировку при создании нового шрифта, как описано здесь . В противном случае вы должны использовать кодировку, которая была определена при создании шрифта. Похоже, что шрифты, которые поставляются с TCPDF, используют WinAnsiEncoding … aka code page 1252.

Неуклюжий, но эффективный.

С шрифтом dejavusans он отлично работал как для русских, так и для латышских букв.

Со мной это была проблема с шрифтом. Я использовал времена шрифта, и мои местные многобайтовые символы не отображались должным образом. Когда я изменил его на freeserif они нормально работали 🙂

Для этого используйте следующий код конструктора TCPDF параметра

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

Это поможет вам.

С пакетом 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); 
 $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 , а в том, что я использовал. Я упоминаю, что я использовал шаблон TWIG с шрифтом Courier. Вы можете попробовать изменить шрифт на freeserif