TCPDF UTF-8. Symbole Litewskie nie pojawiają się

Im używając najnowszej wersji TCPDF (5.9). Ale mają dziwne problemy z kodowaniem. Potrzebuję symboli Języka Litewskiego, takich jak: ąčęėįšųūž. Ale zdobądź tylko kilka z nich. Inne pozostają jak ????? Więc co mam zrobić ? Używam domyślnej czcionki times (pochodzi z TCPDF download).

Każda pomoc będzie mile widziana.

Author: Developer Marius Žilėnas, 2011-03-17

15 answers

Ustaw parametr $unicode w konstruktorze TCPDF na false, a parametr $encoding na 'ISO-8859-1' lub inną mapę znaków.

To pomoże ci:

Domyślnie dla UTF-8 unicode:

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

Przykład konstruktora dla europejskiego zestawu znaków:

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, false, 'ISO-8859-1', false);
 15
Author: Elisa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-09 13:51:37

TCPDF jest dość skomplikowany z utf8. Najlepszym sposobem na osiągnięcie tego, co chcesz, jest osadzenie czcionki w wygenerowanym pliku PDF. Możesz użyć czcionki freeserif z pakietu TCPDF, zawiera ona wszystkie symbole utf8, pokazuje absolutnie dowolny znak dowolnego języka, ale dodaje ~700kb do pliku wyjściowego. To prawdopodobnie najprostszy sposób na uzyskanie symboli, których potrzebujesz, jeśli Rozmiar pliku nie ma znaczenia.

Możesz również utworzyć własną czcionkę do osadzenia, zawierającą znaki, których potrzebujesz. To chyba najlepsze rozwiązanie, zachowując uniwersalny i mały rozmiar, ale jest bardziej złożony.

Alternatywnie, można przekazać na podstawowych czcionek, które są pobrane z systemu, a jeśli nie znaleziono, zastąpione przez zamiennik. To sprawia, że plik wyjściowy jest wyjątkowo lekki, ale dodaje konieczność podzestawu czcionek w celu uzyskania egzotycznych znaków. Osobiście nie odniosłem z tym sukcesu, więc nadal uważam, że osadzanie czcionek jest najlepszym rozwiązaniem, które również jest bardziej uniwersalne..

 33
Author: squirrely,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-03 14:28:44

W CPDF core fonts znajduje się czcionka-dejavusans, pokazuje ona wszystkie Litewskie znaki. Wystarczy dodać:

$pdf->setHeaderFont(Array('dejavusans', '', 10, '', false));
$pdf->setFooterFont(Array('dejavusans', '', 8, '', false));
$pdf->SetFont('dejavusans', '', 10, '', false);
 14
Author: Laurynas Mališauskas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-05 17:58:22

Ustaw czcionkę na freeserif jeśli będzie działać. Testowałem.

$pdf->SetFont('freeserif', '', 14, '', true);
 11
Author: Truongnq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-15 17:29:23

Właśnie odkryłem tę samą sytuację podczas próby renderowania rumuńskiego tekstu przy użyciu domyślnej czcionki Helvetica. W trakcie dochodzenia odkryłem, że biblioteka TCPDF traktuje domyślne czcionki (określane jako "podstawowe" czcionki) jako znaki Latin1, więc nawet jeśli powiesz jej, aby używała kodowania UTF-8 i ustawisz flagę unicode, dosłownie przetłumaczy Twój tekst na odpowiedniki Latin1 przed renderowaniem. Domyślnym zachowaniem biblioteki jest, jeśli znajdzie odpowiednik Latin1, przetłumaczenie każdego znak, że może znaleźć odpowiednik dla inaczej tłumaczy znak jako '?'.

Można to znaleźć wewnątrz klasy TCPDF w następującym łańcuchu metod: Write() -> Cell() -> getCellCode() -> _escapetext().

Wewnątrz _escapetext() możesz zobaczyć, że sprawdza $this->isunicode, a następnie sprawdza wybraną czcionkę, aby sprawdzić, czy jej typem jest core|TrueType|Type1. Jeśli tak, to pobierze łańcuch "latinize" za Ciebie za pomocą metody UTF8ToLatin1(). To tutaj?"tłumaczenia biorą miejsce.

Moim zaleceniem byłoby użycie niestandardowej czcionki unicode (jak Deja Vu Sans), która jest podobna do domyślnej czcionki, której szukasz. To zadziałało w mojej obecnej sytuacji.

 10
Author: RobertGonzalez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-16 06:58:34

Aby używać TCPDF ze znakami specjalnymi, takimi jak฿, 포 lub innymi musisz użyć unicode czcionka:

  1. Pobierz czcionkę tutaj: ftp://ftp.fu-berlin.de/unix/X11/multimedia/MPlayer/contrib/fonts/arialuni.ttf.bz2

  2. Utwórz testowy plik pdf i załaduj tę czcionkę do TCPDF przykład:

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

  3. Spowoduje to utworzenie takich czcionek jak:

    Application/libraries/TCPDF/fonts / arialuni.ctg.z
    application/libraries/TCPDF/fonts / arialuni.php
    application/libraries/TCPDF/fonts / arialuni.z

  4. Teraz możesz ustawić nową czcionkę za pomocą : $pdf - > SetFont ('arialuni', ", 10.5);

  5. Teraz możesz używać specjalnych znaków unicode, takich jak ฿ i innych....

Źródło : http://myridia.com/dev_posts/view/852

 8
Author: Ledadu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-02 15:08:21

Masz problem z odczytaniem znaku Karnātakaz bazy danych i wyświetlaniem w ten sposób karn?taka znaczy "?" którego nie chcemy wtedy robić:

  1. Define charset for the connection (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. Użyj $pdf->SetFont('DejaVuSerif', '', 10); zamiast $pdf->SetFont('helvetica', 'B', 12);

    • dla Biblioteki TCPDF PHP odczytać znak jak Rājasthānzamiast r?jasth?n z bazy danych
 4
Author: Aki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-08 13:13:17

IIRC, można zdefiniować kodowanie podczas tworzenia nowej czcionki, jak opisano tutaj . W przeciwnym razie musisz użyć kodowania zdefiniowanego podczas tworzenia czcionki. Wygląda na to, że czcionki wysyłane z TCPDF używają WinAnsiEncoding... kod: 1252

Niezgrabny, ale skuteczny.

 3
Author: Mark Storer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-17 17:25:42

Z czcionką dejavusans sprawdził się dobrze zarówno dla liter rosyjskich, jak i łotewskich.

 2
Author: JustAMartin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-16 12:44:47

Z domyślnym pakietem TCPDF przetestowano dejavusans i freeserif i obie czcionki działają ze znakami litewskimi. Wpisałem też kilka rosyjskich znaków i też działały. Użyłem tego kodu, aby go przetestować:

$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);
 2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-27 19:14:32

U mnie to był problem z czcionką. Użyłem czcionki times i mój lokalny wielobajtowy chras nie wyświetla się poprawnie. Jak zmieniłem na freeserif to działali normalnie:)

 1
Author: Klemen Tusar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-15 22:44:16

W tym celu użyj następującego kodu parametru konstruktor TCPDF

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, false, 'ISO-8859-1', false);
To ci pomoże.
 0
Author: Anil Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-21 07:17:35
$fontname = $pdf->addTTFfont('C:\xampp\htdocs\copyshop\fonts\07-TH-Sarabun-PSK\THSarabun.ttf', 'TrueTypeUnicode', '', 32);
    $pdf->SetFont($fontname, '', 16,'',FALSE); //Working
 0
Author: Donot Don't,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-11 18:00:43

Miałem ten sam problem z rumuńskimi znakami i problemem nie było kodowanie, LC_CTYPE lub inne ustawienie z TCPDF, ale czcionka, której użyłem. Wspominam, że użyłem TWIG template z czcionką Courier. Możesz spróbować zmienić czcionkę na freeserif

 0
Author: Ciprian Virlan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-04 10:38:24

Zmień czcionkę, aby wyświetlała się normalnie i symbole

$pdf->SetFont('cid0cs', '', 12);
 0
Author: Gajarajan K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-26 12:17:07