Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

По умолчанию для юникода 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);

Ответ 2

TCPDF довольно сложно с utf8. Лучший способ добиться того, что вы хотите, - это встроить шрифт в сам созданный файл PDF. Вы можете использовать шрифт freeserif из пакета TCPDF, он содержит все символы utf8, показывает абсолютно любой символ любого языка, но добавляет ~ 700 кб в выходной файл. Это, вероятно, самый простой способ получить символы, которые вам нужны, если размер файла не имеет значения.

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

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

Ответ 3

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

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

Ответ 4

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

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

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

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

Ответ 5

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

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

Ответ 6

Использовать 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, такие как ฿ и многое другое....

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

Ответ 7

У вас есть проблема, чтобы прочитать символ, например Karnātaka из базы данных, и отобразить его как karn? taka Я имею в виду "?, который мы надеваем Не хочу делать следующие вещи:

  • Определите кодировку для соединения (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);

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

Ответ 11

С пакетом 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);

Ответ 12

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

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

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

Ответ 13

$fontname = $pdf->addTTFfont('C:\xampp\htdocs\copyshop\fonts\07-TH-Sarabun-PSK\THSarabun.ttf', 'TrueTypeUnicode', '', 32);
    $pdf->SetFont($fontname, '', 16,'',FALSE); //Working

Ответ 14

У меня была такая же проблема с румынскими символами, и проблема была не в кодировке LC_CTYPE или другом параметре из TCPDF, а в том, что я использовал шрифт. Я упоминаю, что я использовал шаблон TWIG с шрифтом Courier. Вы можете попробовать изменить шрифт на freeserif

Ответ 15

изменить шрифт, чтобы он отображался нормально ₹ и литовские символы

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