TCPDF UTF-8. Los símbolos lituanos no aparecen

Estoy usando la última versión de TCPDF (5.9). Pero tiene algunos problemas extraños con la encoding. Necesito símbolos del lenguaje lituano como: ąčęėįšųūž. Pero consigue solo algunos. Otros permanecen como ????? Entonces qué debo hacer ? Utilizo la fuente de los tiempos predeterminados (viene con la descarga de TCPDF).

Cualquier ayuda sería apreciada.

Establezca el parámetro $unicode en el constructor TCPDF en false y el parámetro de $encoding en 'ISO-8859-1' o algún otro mapa de caracteres.

Esto te ayudará a:

Predeterminado para UTF-8 unicode:

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

Ejemplo de constructor para charset europeo:

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

TCPDF es bastante complicado con utf8. La mejor forma de lograr lo que desea es incrustar la fuente en el archivo PDF generado. Puede usar la fuente freeserif del paquete TCPDF, contiene todos los símbolos utf8, muestra absolutamente cualquier carácter de cualquier idioma, pero agrega ~ 700kb al archivo de salida. Esa es probablemente la forma más fácil de obtener los símbolos que necesita si el tamaño del archivo no es importante.

También puede crear su propia fuente para incrustar, que contenga los caracteres que necesita. Esa es probablemente la mejor solución, manteniéndola universal y de pequeño tamaño, pero es más compleja.

Alternativamente, puede retransmitir en fonts del núcleo, que se toman del sistema, y ​​si no se encuentran, se reemplazan por un sustituto. Esto hace que el archivo de salida sea extremadamente liviano, pero agrega la necesidad de subconjuntos de fonts para obtener caracteres exóticos. Personalmente no he tenido éxito con esto, así que sigo pensando que la incorporación de fonts es la mejor solución, que también es más universal.

Acabo de descubrir esta misma situación cuando bash renderizar texto rumano usando la fuente Helvetica predeterminada. Al hacer una investigación descubrí que la biblioteca tcpdf trata sus fonts predeterminadas (denominadas fonts “centrales”) como caracteres Latin1, por lo que incluso si le dice que use la encoding UTF-8 y configure el indicador Unicode, literalmente traducirá su texto a Latin1 equivalentes antes de renderizar. El comportamiento predeterminado de la biblioteca es, si encuentra un equivalente en Latin1, traducir cada carácter que puede encontrar un equivalente, ya que de lo contrario traduce el carácter como ‘?’.

Esto se puede encontrar dentro de la clase TCPDF en la siguiente cadena de método: Write() -> Cell() -> getCellCode() -> _escapetext() .

Dentro de _escapetext() puedes ver que está comprobando $this->isunicode luego verificando la fuente seleccionada para ver si su tipo es core | TrueType | Type1 . Si es así, tomará la cadena y la latinizará por usted mediante el método UTF8ToLatin1() . Aquí es donde el ‘?’ traducciones están teniendo lugar.

Mi recomendación sería usar una fuente Unicode personalizada (como Deja Vu Sans) que sea similar a la fuente predeterminada que está buscando. Eso funcionó para mí en mi situación actual.

hay una fuente incluida en las fonts centrales CPDF – dejavusans, muestra todos los caracteres lituanos. Solo agregue lo siguiente:

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

Para usar TCPDF con caracteres especiales como ฿, 포 u otros , debe usar una fuente Unicode :

  1. descargue la fuente aquí: ftp://ftp.fu-berlin.de/unix/X11/multimedia/MPlayer/contrib/fonts/arialuni.ttf.bz2

  2. crea un archivo pdf de prueba y carga esta fuente en el ejemplo de TCPDF:

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

  3. esto creará las fonts como:

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

  4. ahora puede establecer la nueva fuente con: $ pdf-> SetFont (‘arialuni’, ”, 10.5);

  5. y ahora puedes usar caracteres Unicode especiales como ฿ y más …

Fuente: http://myridia.com/dev_posts/view/852

Establezca la fuente en freeserif si funcionará. Probé.

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

¿Tienes algún problema para leer un personaje como Karnātaka de la base de datos y mostrar como este karn? Taka, quiero decir “?” lo cual no queremos entonces hacer lo siguiente:

  1. Definir charset para la conexión ( 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. Use $pdf->SetFont('DejaVuSerif', '', 10); en lugar de $pdf->SetFont('helvetica', 'B', 12);

    • Para la biblioteca TCPDF del carácter de lectura PHP como Rājasthān en lugar de R? Jasth? N de la base de datos

IIRC, puede definir una encoding cuando crea una fuente nueva, como se describe aquí . De lo contrario, debe usar la encoding que se definió cuando se creó la fuente. Parece que las fonts que se envían con TCPDF usan WinAnsiEncoding … alias código página 1252.

Clunky, pero efectivo.

Para mí fue un problema de fuente. Usé los times las fonts y mis chras multibyte locales no se muestran correctamente. Cuando lo cambié a freeserif , funcionaban normalmente 🙂

Con la fuente dejavusans, funcionó bien tanto para las letras rusas como para las letonas.

Con el paquete TCPDF predeterminado, se prueban dejavusans y freeserif y ambas fonts funcionan con caracteres lituanos . También escribí algunos caracteres rusos y también funcionaron. Usé este código para probarlo:

 $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); 

Para esto use el siguiente código del parámetro TCPDF constructor

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

Esto te ayudará.

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

Tuve el mismo problema con los caracteres rumanos y el problema no fue la encoding, LC_CTYPE u otra configuración de TCPDF , sino la fuente que utilicé. Menciono que utilicé plantillas TWIG con fuente Courier. Puede intentar cambiar su fuente a freeserif