¿Alguien sabe cómo configurar la codificación en el paquete FPDF en utf-8? ¿O al menos ISO-8859-7 (griego) que admite caracteres griegos?
Básicamente, quiero crear un archivo pdf que contenga caracteres griegos.
Cualquier sugerencia ayudaría. Jorge
unicode
utf-8
character-encoding
fpdf
yorgos
fuente
fuente
Respuestas:
No utilice codificación UTF-8. Las fuentes FPDF estándar utilizan 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 caracteres 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);
fuente
También hay una versión UTF-8 oficial de FPDF llamada tFPDF http://www.fpdf.org/en/script/script92.php
Puede cambiar fácilmente desde el FPDF original, solo asegúrese de usar también una fuente Unicode como se muestra en el ejemplo en el enlace anterior o mi código:
Creo que es mucho más elegante usar esto en lugar de usar spam utf8_decode () en todas partes y la capacidad 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 existen 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 hay forma directa de convertir HTML a PDF). La mayor parte 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/
fuente
hay una solución realmente sencilla para este problema.
En el archivo fpdf.php vaya a la línea que dice:
Es la línea 648 en mi versión de fpdf. Inserte la siguiente línea de código:
(encima de la línea de código)
Esto funciona para todos los caracteres 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 un guión entre utf y 8.
Espero que lo anterior haya sido útil.
Daan
fuente
Primero debes generar una fuente. Debe utilizar la
MakeFont
utilidad incluida en el paquete FPDF. Usé en Linux este script un poco extendido de la demostración:Luego copié los archivos generados al
font
directorio de mi web y usé esto:(Estaba trabajando en una mesa.) Eso funcionó para mi idioma ( Buňka jedna es checo para Cell uno ). El idioma checo pertenece a los idiomas de Europa Central, 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:
La letra danesa se
ø
convierteř
en ISO-8859-2.Sugerencia de solución: debe obtener una fuente griega, generar la fuente con la codificación adecuada (ISO-8859-7) y utilizarla
iconv
con la misma codificación de destino con la que se generó la fuente.fuente
Existe una extensión de FPDF llamada mPDF que permite fuentes Unicode.
http://www.mpdf1.com/mpdf/index.php
fuente
Esta respuesta no funcionó para mí, también necesitaba ejecutar la decodificación html en la cadena. Ver
Los accesorios van a emfi desde html_entity_decode en FPDF (usando la extensión tFPDF)
fuente
Ninguna de las soluciones anteriores funcionará.
Prueba esto:
fuente
Puede hacer una clase para extender FPDF y agregar esto:
}
fuente
Quería responder esto para cualquiera que no se haya cambiado a TFPDF por cualquier motivo (integración de marco, etc.)
Vaya a: http://www.fpdf.org/makefont/index.php
Utilizar una
.ttf
fuente compatible para el idioma que desea utilizar. Asegúrese de elegir el número de codificación correcto para su idioma. Descargue los archivos y péguelos en su directorio de fuentes FPDF actual.Use esto para activar la nueva fuente:
$pdf->AddFont($font_name,'','Your_Font_Here.php');
Entonces puedes usarlo
$pdf->SetFont
normalmente.En la fuente en sí, use iconv para convertir a UTF-8. Entonces, si por ejemplo estás usando hebreo, lo 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))
.fuente
simplemente edite la celda de función en el archivo fpdf.php, busque la línea que se ve así
después de encontrar la línea
escribir después del
{
,guarde el archivo y listo, los acentos y la codificación utf8 estarán funcionando :)
fuente
¿Cómo creo PDF en FPDF que sean compatibles con chino, japonés, ruso, etc.?
(instantáneas del código en uso a continuación)
Me gustaría proporcionar: un resumen del problema, la solución, un proyecto de github con el código de trabajo y un ejemplo en línea con el PDF resultante esperado.
El problema :
De hecho, necesita una fuente que admita los caracteres UTF-8 que está utilizando.
IE, simplemente usar Helvetica e intentar mostrar japonés no funcionará. Si usa Font Forge, o alguna otra herramienta de fuentes, puede desplazarse hasta los caracteres chinos de la fuente y ver que están en blanco.
Google tiene una fuente (fuente Noto ) que contiene todos los idiomas, y es de 20 MB, que suele ser varios factores del tamaño de su texto. Entonces, puede ver por qué muchas fuentes simplemente no cubren todos los idiomas.
La solución :
Estoy usando paquetes de fuentes redondeadas-mgenplus-20140828.ttf y ZCOOL_QingKe_HuangYou.ttf para japonés y chino, que son de código abierto y se pueden encontrar en muchos proyectos de código abierto. En tFPDF en sí, o en una nueva clase heredada, como
class HTMLtoPDF extends tFPDF {...}
, harás esto ...¡No debería haber nada más!
Paquete de código en GitHub:
https://github.com/HoldOffHunger/php-html-to-pdf
Trabajo, demostración en línea de japonés:
https://www.earthfluent.com/privacy.pdf?language=ja
fuente
Para 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 fpdf / font directorio
3) Úselo en su código:
fuente
En lugar de esta solución iconv:
Podrías usar lo siguiente:
Ver: ¿Cómo convertir caracteres de Windows-1252 a valores en php?
fuente
Hay una extensión de FPDF llamada UFDPF http://acko.net/blog/ufpdf-unicode-utf-8-extension-for-fpdf/
Pero, en mi humilde opinión, es mejor usar mpdf si es posible que cambie de clase.
fuente
Puede aplicar esta función en su texto:
Gracias
fuente
Utilizo FPDF para ASP y la función iconv no está disponible. Parece extraño, resolví el problema de UTF-8 agregando una imagen falsa (un jpeg de 1x1px) al pdf, justo después de la función AddPage ():
De esta manera, los caracteres acentuados se agregan correctamente a mi pdf, no me pregunten por qué pero funciona.
fuente
No estoy seguro de si funcionará para el griego, pero tuve el mismo problema con los caracteres del portugués brasileño y mi solución fue usar entidades html. Tuve básicamente dos casos:
Para estos, primero lo codifiqué en entidades html
htmlentities()
y luego las decodifiqué eniso-8859-1
. Ejemplo:Para estos, acabo de dejar de
htmlentities()
llamar. Ejemplo:Luego pasé
$s
a FPDF, como en este ejemplo:Nota:
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.phpEspero que ayude.
fuente
Sé que esta pregunta es antigua, pero creo que mi respuesta ayudaría a aquellos que 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, usé 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í:
fuente