Quelqu'un sait-il comment régler l'encodage du paquet FPDF sur UTF-8 ? Ou au moins en ISO-8859-7 (grec) qui supporte les caractères grecs ?
En gros, je veux créer un fichier PDF contenant des caractères grecs.
Toute suggestion serait utile. George
Quelqu'un sait-il comment régler l'encodage du paquet FPDF sur UTF-8 ? Ou au moins en ISO-8859-7 (grec) qui supporte les caractères grecs ?
En gros, je veux créer un fichier PDF contenant des caractères grecs.
Toute suggestion serait utile. George
N'utilisez pas l'encodage UTF-8. Les polices FPDF standard utilisent ISO-8859-1 ou Windows-1252. Il est possible d'effectuer une conversion vers ISO-8859-1 à l'aide de la fonction utf8_decode()
: $str = utf8_decode($str);
Mais certains caractères comme l'euro ne seront pas traduits correctement. Si l'extension iconv est disponible, la bonne façon de procéder est la suivante : $str = iconv('UTF-8', 'windows-1252', $str);
Je ne pense pas que ça va aider. Votre réponse explique comment générer un PDF avec un encodage ISO-8859-1 ou Windows-1252, mais ces encodages ne fonctionneront pas pour les langues non latines. Sans parler de la sortie de textes multi-langues (multi-script).
@Rafiq : n'utilisez pas le "vieux" FPDF mais la nouvelle version UTF8 du tFPDF comme indiqué dans ma réponse.
Il existe également une version officielle UTF-8 de FPDF appelée tFPDF. http://www.fpdf.org/en/script/script92.php
Vous pouvez facilement passer du FPDF original, assurez-vous simplement d'utiliser une police unicode comme indiqué dans l'exemple du lien ci-dessus ou dans mon code :
<?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");
//...
?>
Je pense qu'il est beaucoup plus élégant d'utiliser cette méthode plutôt que d'utiliser utf8_decode() partout et la possibilité d'utiliser des fichiers .ttf directement dans AddFont() est également un avantage.
Toute autre réponse n'est qu'un moyen d'éviter ou de contourner le problème, et éviter UTF-8 n'est pas une option réelle pour un projet à jour.
Il existe également des alternatives comme mPDF ou TCPDF (et d'autres) qui sont basées sur FPDF mais offrent des fonctions avancées, ont un support UTF-8 et peuvent interpréter du code HTML (limité bien sûr car il n'y a pas de moyen direct de convertir du HTML en PDF). La plupart du code FPDF peut être utilisé directement dans ces bibliothèques, il est donc assez facile de migrer le code.
Aucune des solutions d'iconv et de décodage ne fonctionne pour les caractères les plus exceptionnels (ä). Mais si vous remplacez simplement votre fpdf.php par le fichier tpdf.php, tout commence à fonctionner et vos fichiers deviennent plus petits en prime. Bonne correction.
Le FPDF et le tFPDF sont-ils des branches distinctes ? Quelqu'un sait-il pourquoi le tFPDF est si bien caché sur la page FPDF ? Y a-t-il des inconvénients que l'on devrait connaître avant de changer de site ?
Je ne sais pas pourquoi ils n'en ont pas fait la version FPDF par défaut, mais elle est directement liée à la page principale. fpdf.org et comme mentionné ici, les fonctionnalités de tFPDF ont été initialement développées pour mPDF. J'ai utilisé tFPDF pour un grand nombre de PDF dans un environnement productif et je pense qu'à part les changements d'UTF-8 et de police, c'est 100% identique. Je n'ai jamais eu aucun problème.
Il existe une solution très simple pour ce problème.
Dans le fichier fpdf.php, allez à la ligne qui dit :
if($txt!=='')
{
Il s'agit de la ligne 648 dans ma version de fpdf. Insérez la ligne de code suivante :
$txt = iconv('utf-8', 'cp1252', $txt);
(au-dessus de la ligne de code)
if($align=='R')
Cela fonctionne pour tous les caractères spéciaux allemands et devrait également fonctionner pour les caractères spéciaux grecs. Sinon, remplacez simplement cp1252 par l'alphabet dont vous avez besoin. Vous pouvez voir tous les caractères supportés ici : http://en.wikipedia.org/wiki/Windows-1252
J'ai vu la solution ici : http://fudforum.org/forum/index.php?t=msg&goto=167345 Veuillez utiliser mon exemple de code ci-dessus, car l'auteur original a oublié d'insérer un tiret entre utf et 8.
J'espère que ce qui précède vous a été utile.
Daan
Parfait, cela fonctionne toujours ou est nécessaire après la mise à jour de FPDF vers une version qui supporte PHP7 pour afficher correctement les caractères spéciaux.
Une solution simple et étonnante. C'est triste qu'elle soit rangée dans un endroit obscur de stackoverflow :)
Vous devez d'abord générer une police. Vous devez utiliser le MakeFont
inclus dans le package FPDF. J'ai utilisé sur Linux ce script un peu étendu de la démo :
<?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');
}
?>
Ensuite, j'ai copié les fichiers générés dans le font
de mon site web et l'a utilisé :
$pdf->Cell(80,70, iconv('UTF-8', 'ISO-8859-2', 'Buňka jedna'),1);
(Je travaillais sur une table.) Cela a fonctionné pour ma langue ( Buňka jedna signifie en tchèque Cellule 1 ). La langue tchèque fait partie des langues d'Europe centrale, également ISO-8859-2. Malheureusement, l'utilisateur de FPDF est obligé de perdre les avantages de l'encodage UTF-8. Vous ne pouvez pas obtenir ceci dans votre PDF :
Městečko Fruens Bøge
Lettre danoise ø
devient ř
en ISO-8859-2.
Suggestion de solution : Vous devez obtenir une police grecque, générer la police en utilisant l'encodage approprié (ISO-8859-7) et utiliser iconv
avec le même encodage cible que celui avec lequel la police a été générée.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Si vous voulez utiliser plus de langues, vous avez besoin d'UTF8, alors vous pouvez utiliser tFPDF. Jetez un coup d'œil à la paquetage du compositeur .