web-dev-qa-db-fra.com

Caractères spéciaux dans FPDF avec PHP

J'ai un formulaire Web que les utilisateurs peuvent remplir et que le contenu remplit un PDF avec FPDF et PHP. Lorsqu'un utilisateur entre un Word avec une apostrophe, une barre oblique apparaît devant lui sur le PDF.

De même, les caractères spéciaux comme les symboles de marque sont mal encodés.

La FAQ FPDF dit d'utiliser:

$str = utf8_decode($str);

Mais je ne sais pas comment l'appliquer à l'ensemble du PDF. J'essaie d'y penser comme s'il s'agissait d'une page HTML mais cela n'aide pas.

Des idées?

26
Carson

A compris cela en procédant comme suit (pagesubtitle est le nom du champ de texte dans le formulaire):

$reportSubtitle = stripslashes($_POST['pagesubtitle']);
$reportSubtitle = iconv('UTF-8', 'windows-1252', $reportSubtitle);

Imprimez-le ensuite:

$pdf->Write (6, $reportSubtitle);

Cela supprimera toutes les barres obliques indésirables après les apostrophes, et utilisera la fonction 'iconv' pour imprimer des caractères spéciaux tels que ™

69
Carson

Tout ce qui précède n'a pas fonctionné pour moi, mais je l'ai fait fonctionner.

J'ai réussi à le faire "à la manière barbare" en traduisant simplement chaque personnage bizarre à sa valeur d'URL. Décodez ensuite simplement l'url et le tour est joué!

function em($Word) {

    $Word = str_replace("@","%40",$Word);
    $Word = str_replace("`","%60",$Word);
    $Word = str_replace("¢","%A2",$Word);
    $Word = str_replace("£","%A3",$Word);
    $Word = str_replace("¥","%A5",$Word);
    $Word = str_replace("|","%A6",$Word);
    $Word = str_replace("«","%AB",$Word);
    $Word = str_replace("¬","%AC",$Word);
    $Word = str_replace("¯","%AD",$Word);
    $Word = str_replace("º","%B0",$Word);
    $Word = str_replace("±","%B1",$Word);
    $Word = str_replace("ª","%B2",$Word);
    $Word = str_replace("µ","%B5",$Word);
    $Word = str_replace("»","%BB",$Word);
    $Word = str_replace("¼","%BC",$Word);
    $Word = str_replace("½","%BD",$Word);
    $Word = str_replace("¿","%BF",$Word);
    $Word = str_replace("À","%C0",$Word);
    $Word = str_replace("Á","%C1",$Word);
    $Word = str_replace("Â","%C2",$Word);
    $Word = str_replace("Ã","%C3",$Word);
    $Word = str_replace("Ä","%C4",$Word);
    $Word = str_replace("Å","%C5",$Word);
    $Word = str_replace("Æ","%C6",$Word);
    $Word = str_replace("Ç","%C7",$Word);
    $Word = str_replace("È","%C8",$Word);
    $Word = str_replace("É","%C9",$Word);
    $Word = str_replace("Ê","%CA",$Word);
    $Word = str_replace("Ë","%CB",$Word);
    $Word = str_replace("Ì","%CC",$Word);
    $Word = str_replace("Í","%CD",$Word);
    $Word = str_replace("Î","%CE",$Word);
    $Word = str_replace("Ï","%CF",$Word);
    $Word = str_replace("Ð","%D0",$Word);
    $Word = str_replace("Ñ","%D1",$Word);
    $Word = str_replace("Ò","%D2",$Word);
    $Word = str_replace("Ó","%D3",$Word);
    $Word = str_replace("Ô","%D4",$Word);
    $Word = str_replace("Õ","%D5",$Word);
    $Word = str_replace("Ö","%D6",$Word);
    $Word = str_replace("Ø","%D8",$Word);
    $Word = str_replace("Ù","%D9",$Word);
    $Word = str_replace("Ú","%DA",$Word);
    $Word = str_replace("Û","%DB",$Word);
    $Word = str_replace("Ü","%DC",$Word);
    $Word = str_replace("Ý","%DD",$Word);
    $Word = str_replace("Þ","%DE",$Word);
    $Word = str_replace("ß","%DF",$Word);
    $Word = str_replace("à","%E0",$Word);
    $Word = str_replace("á","%E1",$Word);
    $Word = str_replace("â","%E2",$Word);
    $Word = str_replace("ã","%E3",$Word);
    $Word = str_replace("ä","%E4",$Word);
    $Word = str_replace("å","%E5",$Word);
    $Word = str_replace("æ","%E6",$Word);
    $Word = str_replace("ç","%E7",$Word);
    $Word = str_replace("è","%E8",$Word);
    $Word = str_replace("é","%E9",$Word);
    $Word = str_replace("ê","%EA",$Word);
    $Word = str_replace("ë","%EB",$Word);
    $Word = str_replace("ì","%EC",$Word);
    $Word = str_replace("í","%ED",$Word);
    $Word = str_replace("î","%EE",$Word);
    $Word = str_replace("ï","%EF",$Word);
    $Word = str_replace("ð","%F0",$Word);
    $Word = str_replace("ñ","%F1",$Word);
    $Word = str_replace("ò","%F2",$Word);
    $Word = str_replace("ó","%F3",$Word);
    $Word = str_replace("ô","%F4",$Word);
    $Word = str_replace("õ","%F5",$Word);
    $Word = str_replace("ö","%F6",$Word);
    $Word = str_replace("÷","%F7",$Word);
    $Word = str_replace("ø","%F8",$Word);
    $Word = str_replace("ù","%F9",$Word);
    $Word = str_replace("ú","%FA",$Word);
    $Word = str_replace("û","%FB",$Word);
    $Word = str_replace("ü","%FC",$Word);
    $Word = str_replace("ý","%FD",$Word);
    $Word = str_replace("þ","%FE",$Word);
    $Word = str_replace("ÿ","%FF",$Word);
    return $Word;
}

Et bien sûr, j'appelle la fonction

$weirdword = "Días, Miércoles, Sábado,miércoles"; //Some spanish days
$weirdword = em($weirdword);
$weirdword = urldecode($weirdword);
echo $weirdword;

Donner une sortie:

Días, Miércoles, Sábado, miércoles

23
Oscar Bout

Aucun des éléments ci-dessus n'avait résolu mon problème. Je l'avais résolu de la manière suivante:

setlocale(LC_CTYPE, 'en_US');

$value = iconv('UTF-8', 'ASCII//TRANSLIT', $value);
$fpdf->Cell(140, 6, $value, 1);

J'espère que vous serez utile.

Référence: Lien

6
MH2K9

aucune des solutions ci-dessus n'a fonctionné pour moi, j'ai donc résolu le problème comme ceci:

$this->AddFont('Arial','','arial.php');
$this->SetFont('Arial','',12);
$this->Cell(0,5,iconv("UTF-8", "CP1250//TRANSLIT", $string),0,1,'L');

Avant d'essayer les lignes ci-dessus, procédez comme suit:

Copiez de c: /Windows/Fonts/Arial.ttf dans le dossier/tutorial de FPDF.

Modifiez le contenu de makefont.php

require('../makefont/makefont.php');
MakeFont('arial.ttf','cp1250');

Exécutez makefont.php

Copiez les fichiers suivants dans le dossier/font de FPDF: arial.php arial.ttf arial.z

Enfin, définissez le "dossier de polices". Ouvrez fpdf.php (fichier de bibliothèque principal) et ajoutez:

define('FPDF_FONTPATH','font');

Le PDF fonctionne pour moi avec tous les caractères spéciaux, je pense que c'était le problème dans la police Arial elle-même, que FPDF utilise à l'origine. Il devrait également fonctionner avec d'autres polices, si elles prennent en charge vos caractères. Bonne chance!

4
tomazahlin

Ci-dessous fonctionne pour moi (en utilisant FPDF):


function em_jaz($Word) {
$Word = str_replace('+', ' ', $Word);
$Word = str_replace("%C3%A9","%E9",$Word);          /* é */
$Word = str_replace("%C3%A8","%E8",$Word);          /* è */
$Word = str_replace("%C3%AE","%EE",$Word);          /* î */
$Word = str_replace("%26rsquo%3B","%27",$Word);     /* ' */
$Word = str_replace("%C3%89","%C9",$Word);          /* É */
$Word = str_replace("%C3%8A","%CA",$Word);          /* Ê */ 
$Word = str_replace("%C3%8B","%CB",$Word);          /* Ë */
$Word = str_replace("%C3%8C","%CC",$Word);          /* Ì */
$Word = str_replace("%C3%8D","%CD",$Word);          /* Í */
$Word = str_replace("%C3%8E","%CE",$Word);          /* Î */
$Word = str_replace("%C3%8F","%CF",$Word);          /* Ï */
$Word = str_replace("%C3%90","%D0",$Word);          /* Ð */
$Word = str_replace("%C3%91","%D1",$Word);          /* Ñ */
$Word = str_replace("%C3%92","%D2",$Word);          /* Ò */
$Word = str_replace("%C3%93","%D3",$Word);          /* Ó */
$Word = str_replace("%C3%94","%D4",$Word);          /* Ô */
$Word = str_replace("%C3%95","%D5",$Word);          /* Õ */
$Word = str_replace("%C3%96","%D6",$Word);          /* Ö */
$Word = str_replace("%C3%98","%D8",$Word);          /* Ø */                 
$Word = str_replace("%C3%99","%D9",$Word);          /* Ù */
$Word = str_replace("%C3%9A","%DA",$Word);          /* Ú */
$Word = str_replace("%C3%9B","%DB",$Word);          /* Û */
$Word = str_replace("%C3%9C","%DC",$Word);          /* Ü */
$Word = str_replace("%C3%9D","%DD",$Word);          /* Ý */
$Word = str_replace("%C3%9E","%DE",$Word);          /* Þ */
$Word = str_replace("%C3%9F","%DF",$Word);          /* ß */
$Word = str_replace("%C3%A0","%E0",$Word);          /* à */
$Word = str_replace("%C3%A1","%E1",$Word);          /* á */
$Word = str_replace("%C3%A2","%E2",$Word);          /* â */
$Word = str_replace("%C3%A3","%E3",$Word);          /* ã */
$Word = str_replace("%C3%A4","%E4",$Word);          /* ä */
$Word = str_replace("%C3%A5","%E5",$Word);          /* å */
$Word = str_replace("%C3%A6","%E6",$Word);          /* æ */
$Word = str_replace("%C3%A7","%E7",$Word);          /* ç */
$Word = str_replace("%C3%AA","%EA",$Word);          /* ê */
$Word = str_replace("%C3%AB","%EB",$Word);          /* ë */
$Word = str_replace("%C3%AC","%EC",$Word);          /* ì */
$Word = str_replace("%C3%AD","%ED",$Word);          /* í */
$Word = str_replace("%C3%AF","%EF",$Word);          /* ï */
$Word = str_replace("%C3%B0","%F0",$Word);          /* ð */
$Word = str_replace("%C3%B1","%F1",$Word);          /* ñ */
$Word = str_replace("%C3%B2","%F2",$Word);          /* ò */
$Word = str_replace("%C3%B3","%F3",$Word);          /* ó */
$Word = str_replace("%C3%B4","%F4",$Word);          /* ô */
$Word = str_replace("%C3%B5","%F5",$Word);          /* õ */
$Word = str_replace("%C3%B6","%F6",$Word);          /* ö */
$Word = str_replace("%C3%B7","%F7",$Word);          /* ÷ */
$Word = str_replace("%C3%B8","%F8",$Word);          /* ø */
$Word = str_replace("%C3%B9","%F9",$Word);          /* ù */
$Word = str_replace("%C3%BA","%FA",$Word);          /* ú */
$Word = str_replace("%C3%BB","%FB",$Word);          /* û */
$Word = str_replace("%C3%BC","%FC",$Word);          /* ü */
$Word = str_replace("%C3%BD","%FD",$Word);          /* ý */
$Word = str_replace("%C3%BE","%FE",$Word);          /* þ */
$Word = str_replace("%C3%BF","%FF",$Word);          /* ÿ */ 
$Word = str_replace("%40","%40",$Word);             /* @ */
$Word = str_replace("%60","%60",$Word);             /* ` */
$Word = str_replace("%C2%A2","%A2",$Word);          /* ¢ */
$Word = str_replace("%C2%A3","%A3",$Word);          /* £ */
$Word = str_replace("%C2%A5","%A5",$Word);          /* ¥ */
$Word = str_replace("%7C","%A6",$Word);             /* | */
$Word = str_replace("%C2%AB","%AB",$Word);          /* « */
$Word = str_replace("%C2%AC","%AC",$Word);          /* ¬ */
$Word = str_replace("%C2%AF","%AD",$Word);          /* ¯ */
$Word = str_replace("%C2%BA","%B0",$Word);          /* º */
$Word = str_replace("%C2%B1","%B1",$Word);          /* ± */
$Word = str_replace("%C2%AA","%B2",$Word);          /* ª */
$Word = str_replace("%C2%B5","%B5",$Word);          /* µ */
$Word = str_replace("%C2%BB","%BB",$Word);          /* » */
$Word = str_replace("%C2%BC","%BC",$Word);          /* ¼ */
$Word = str_replace("%C2%BD","%BD",$Word);          /* ½ */
$Word = str_replace("%C2%BF","%BF",$Word);          /* ¿ */
$Word = str_replace("%C3%80","%C0",$Word);          /* À */
$Word = str_replace("%C3%81","%C1",$Word);          /* Á */
$Word = str_replace("%C3%82","%C2",$Word);          /* Â */
$Word = str_replace("%C3%83","%C3",$Word);          /* Ã */
$Word = str_replace("%C3%84","%C4",$Word);          /* Ä */
$Word = str_replace("%C3%85","%C5",$Word);          /* Å */
$Word = str_replace("%C3%86","%C6",$Word);          /* Æ */
$Word = str_replace("%C3%87","%C7",$Word);          /* Ç */
$Word = str_replace("%C3%88","%C8",$Word);          `/`* È */
return $Word;
}

$ content = urlencode ($ content);

$ content = urldecode ($ pdf-> em_jaz ($ content));

2
Jaspal Saini

Cette classe est une version modifiée de FPDF qui ajoute la prise en charge UTF-8. De plus, il n'incorpore que les parties nécessaires des polices utilisées dans le document, ce qui rend la taille du fichier beaucoup plus petite que si toutes les polices étaient incorporées. Ces fonctionnalités ont été initialement développées pour le projet mPDF.

http://fpdf.org/en/script/script92.php

1
Pascalmh