utf8 tfpdf php7 new codificacion caracteres acentos unicode utf-8 character-encoding fpdf

unicode - php7 - tfpdf



Codificación FPDF utf-8(CÓMO-TO) (15)

Esta respuesta no funcionó para mí, también necesitaba ejecutar decodificación html en la cadena. Ver

iconv(''UTF-8'', ''windows-1252'', html_entity_decode($str));

Los atributos van a emfi desde html_entity_decode en FPDF (usando la extensión de tFPDF)

¿Alguien sabe cómo configurar la codificación en el paquete FPDF para utf-8? ¿O al menos a ISO-8859-7 (griego) que admite caracteres griegos?

Básicamente quiero crear un archivo pdf que contenga caracteres griegos.

Cualquier sugerencia ayudaría. Jorge




Ninguna de las soluciones anteriores va a funcionar.

Prueba esto:

function filter_html($value){ $value = mb_convert_encoding($value, ''ISO-8859-1'', ''UTF-8''); return $value; }


No estoy seguro de si servirá para el griego, pero tuve el mismo problema para los caracteres en portugués brasileño y mi solución fue utilizar entidades html. Tenía básicamente dos casos:

  1. La cadena puede contener caracteres UTF-8.

Para estos, primero lo codifiqué a entidades html con htmlentities() y luego las decodifiqué a iso-8859-1 . Ejemplo:

$s = html_entity_decode(htmlentities($my_variable_text), ENT_COMPAT | ENT_HTML401, ''iso-8859-1'');

  1. Cadena fija con entidades html:

Para estos, acabo de dejar htmlentities() llamar. Ejemplo:

$s = html_entity_decode("Treasurer/Trésorier", ENT_COMPAT | ENT_HTML401, ''iso-8859-1'');

Luego pasé $s al FPDF, como en este ejemplo:

$pdf->Cell(100, 20, $s, 0, 0, ''L'');

Nota: ENT_COMPAT | ENT_HTML401 ENT_COMPAT | ENT_HTML401 es el valor estándar para el parámetro # 2, como en http://php.net/manual/en/function.html-entity-decode.php

Espero que ayude.


Para las crías.

Cómo logré agregar el idioma ruso a fpdf en mi máquina Linux:

1) Vaya a http://www.fpdf.org/makefont/ y convierta su fuente ttf (por ejemplo, AerialRegular.ttf) en 2 archivos usando la codificación ISO-8859-5 : AerialRegular.php y AerialRegular.z

2) Coloque estos 2 archivos en el directorio fpdf / font

3) Úselo en su código:

$pdf = new /FPDI(); $pdf->AddFont(''ArialMT'','''',''ArialRegular.php''); $pdf->AddPage(); $tplIdx = $pdf->importPage(1); $pdf->useTemplate($tplIdx, 0, 0, 211, 297); //width and height in mms $pdf->SetFont(''ArialMT'','''',35); $pdf->SetTextColor(255,0,0); $fullName = iconv(''UTF-8'', ''ISO-8859-5'', ''Алексей''); $pdf->SetXY(60, 54); $pdf->Write(0, $fullName);


Primero debe generar una fuente. Debe usar la utilidad MakeFont incluida en el paquete FPDF. Utilicé en Linux este script un poco extendido de la demostración:

<?php // Generation of font definition file for tutorial 7 require(''../makefont/makefont.php''); $dir = opendir(''/usr/share/fonts/truetype/ttf-dejavu/''); while (($relativeName = readdir($dir)) !== false) { if ($relativeName == ''..'' || $relativeName == ''.'') continue; MakeFont("/usr/share/fonts/truetype/ttf-dejavu/$relativeName",''ISO-8859-2''); } ?>

Luego copié los archivos generados en el directorio de font de mi web y usé esto:

$pdf->Cell(80,70, iconv(''UTF-8'', ''ISO-8859-2'', ''Buňka jedna''),1);

(Estaba trabajando en una mesa.) Eso funcionó para mi idioma ( Buňka jedna es checo para Cell one ). La lengua checa pertenece a las lenguas centroeuropeas, también ISO-8859-2. Lamentablemente, el usuario de FPDF se ve obligado a perder las ventajas de la codificación UTF-8. No puede obtener esto en su PDF:

Městečko Fruens Bøge

La letra ø danesa se convierte en ř en ISO-8859-2.

Sugerencia de solución: debe obtener una fuente griega, generar la fuente usando la codificación adecuada (ISO-8859-7) y usar iconv con la misma codificación de destino que aquella con la que se generó la fuente.


Puede aplicar esta función en su texto:

$yourtext = iconv(''UTF-8'', ''windows-1252'', $yourtext);

Gracias


Puede hacer una clase para extender el FPDF y agregar esto:

class utfFPDF extends FPDF { function Cell($w, $h=0, $txt="", $border=0, $ln=0, $align='''', $fill=false, $link='''') { if (!empty($txt)){ if (mb_detect_encoding($txt, ''UTF-8'', false)){ $txt = iconv(''UTF-8'', ''ISO-8859-5'', $txt); } } parent::Cell($w, $h, $txt, $border, $ln, $align, $fill, $link); }

}


Quería responder a esto para cualquier persona que no haya cambiado a TFPDF por cualquier motivo (integración de marcos, etc.)

Vaya a: http://www.fpdf.org/makefont/index.php

Use una fuente compatible con .ttf para el idioma que desea usar. Asegúrese de elegir el número de codificación que sea correcto para su idioma. Descargue los archivos y péguelos en su directorio actual de fuentes FPDF.

Use esto para activar la nueva fuente: $pdf->AddFont($font_name,'''',''Your_Font_Here.php'');

Entonces puede usar $pdf->SetFont normalmente.

En la fuente, use iconv para convertir a UTF-8. Entonces, si, por ejemplo, estás usando hebreo, harías iconv(''UTF-8'', ''windows-1255'', $first_name) .

Sustituya el número de codificación de Windows por su codificación de idioma.

De derecha a izquierda, una solución rápida es hacer algo como strrev(iconv(''UTF-8'', ''windows-1255'', $first_name)) .


Sé que esta pregunta es antigua, pero creo que mi respuesta ayudaría a quienes no han encontrado una solución en otras respuestas. Entonces, mi problema era que no podía mostrar caracteres croatas en mi PDF. En primer lugar, utilicé FPDF pero, creo, no es compatible con Unicode. Finalmente, lo que resolvió mi problema es tFPDF, que es la versión de FPDF que admite Unicode. Este es el ejemplo que funcionó para mí:

require(''tFPDF/tfpdf.php''); $pdf = new tFPDF(); $pdf->AddPage(); $pdf->AddFont(''DejaVu'','''',''DejaVuSansCondensed.ttf'',true); $pdf->AddFont(''DejaVu'', ''B'', ''DejaVuSansCondensed-Bold.ttf'', true); $pdf->SetFont(''DejaVu'','''',14); $txt = ''čćžšđČĆŽŠĐ''; $pdf->Write(8,$txt); $pdf->Output();


También hay una versión oficial UTF-8 de FPDF llamada tFPDF http://www.fpdf.org/en/script/script92.php

Puedes cambiar fácilmente desde el FPDF original, solo asegúrate de usar también una fuente Unicode como se muestra en el ejemplo en el enlace anterior o mi código:

<?php //this is a UTF-8 file, we won''t need any encode/decode/iconv workarounds //define the path to the .ttf files you want to use define(''FPDF_FONTPATH'',"../fonts/"); require(''tfpdf.php''); $pdf = new tFPDF(); $pdf->AddPage(); // Add Unicode fonts (.ttf files) $fontName = ''Helvetica''; $pdf->AddFont($fontName,'''',''HelveticaNeue LightCond.ttf'',true); $pdf->AddFont($fontName,''B'',''HelveticaNeue MediumCond.ttf'',true); //now use the Unicode font in bold $pdf->SetFont($fontName,''B'',12); //anything else is identical to the old FPDF, just use Write(),Cell(),MultiCell()... //without any encoding trouble $pdf->Cell(100,20, "Some UTF-8 String"); //... ?>

Creo que es mucho más elegante usar esto en lugar de espaciar utf8_decode () en todas partes y la posibilidad de usar archivos .ttf directamente en AddFont () también es una ventaja.

Cualquier otra respuesta aquí es solo una forma de evitar o solucionar el problema, y ​​evitar UTF-8 no es una opción real para un proyecto actualizado.

También hay alternativas como mPDF o TCPDF (y otras) que se basan en FPDF pero ofrecen funciones avanzadas, tienen soporte UTF-8 y pueden interpretar código HTML (limitado, por supuesto, ya que no existe una forma directa de convertir HTML a PDF). La mayoría del código FPDF se puede usar directamente en esas bibliotecas, por lo que es bastante fácil migrar el código.

https://github.com/mpdf/mpdf http://www.tcpdf.org/


Uso FPDF para ASP, y la función iconv no está disponible. Parece extraño, resolví el problema UTF-8 añadiendo una imagen falsa (un jpeg de 1x1px) al pdf, justo después de la función AddPage ():

pdf.Image "images/fpdf.jpg",0,0,1

De esta manera, los caracteres acentuados se agregan correctamente a mi pdf, no me preguntes por qué pero funciona.


hay una solución realmente simple para este problema.

En el archivo fpdf.php vaya a la línea que dice:

if($txt!=='''') {

Es la línea 648 en mi versión de fpdf. Inserta la siguiente línea de código:

$txt = iconv(''utf-8'', ''cp1252'', $txt);

(por encima de la línea de código)

if($align==''R'')

Esto funciona para todos los personajes especiales alemanes y también debería funcionar para los caracteres especiales griegos. De lo contrario, simplemente reemplace cp1252 con el alfabeto respectivo que necesite. Puede ver todos los caracteres admitidos aquí: http://en.wikipedia.org/wiki/Windows-1252

Vi la solución aquí: http://fudforum.org/forum/index.php?t=msg&goto=167345 Utilice mi código de ejemplo anterior, ya que el autor original olvidó insertar una línea entre utf y 8.

Espero que lo anterior haya sido útil.

Daan


No use la codificación UTF-8. Las fuentes estándar FPDF usan ISO-8859-1 o Windows-1252. Es posible realizar una conversión a ISO-8859-1 con utf8_decode() : $str = utf8_decode($str); Pero algunos personajes como el Euro no se traducirán correctamente. Si la extensión iconv está disponible, la forma correcta de hacerlo es la siguiente: $str = iconv(''UTF-8'', ''windows-1252'', $str);