Verfasst von: duk4yl | September 12, 2008

UTF-8: Umlaute und FPDF

pdf

fpdf

Bei meiner Umstellung auf UTF-8 musste ich herausfinden, dass FPDF standardmässig kein UTF-8 unterstützt. Auch wenn man die Datei, die mir die PDF erzeugt, auf UTF-8 umstellt, bleiben die Umlaute dennoch „falsch“. Klar, meine Daten, die ich in die Variablen speichere sind alle in UTF-8. Dagegen hilft aber diese Funktion:

utf8_decode()

Und nun funktioniert alles wieder. In meinem konkreten Fall hatte ich diese Schwierigkeiten mit Session Variablen (PHP), die aus einer MYSQL Datenbank mit Daten gefüttert wurden. Der einfache Aufruf der Variablen zeigte mir ausschließlich Fragezeichen anstelle meiner Umlaute und Sonderzeichen an. Mithilfe von

utf8_decode($_SESSION[value][x1]);

war mein Problem beseitig.

[EDIT 2008-10-18]

Nun kam ich wieder in die Situtation, dass die Ausgabe „fehlerhaft“ war. („Mülheim“)

So sah mein Code vorher aus:

$pdf->Cell(0,0,$_POST[plz].“ „.$_POST[stadt],0,1);

und mit utf8_decode() so:

$pdf->Cell(0,0,$_POST[plz].“ „.utf8_decode($_POST[stadt]),0,1);


Antworten

  1. FPDF und UTF-8 begleiten mich schon seit langem. Erkär doch bitte wie das mit dem utf8_decode geht. Ich möchte endlich mein PDF-Katalog in XTC zum laufen bringen.

    Gruß

  2. Hallo Ali Saglam,

    in meinem Projekt sind alle Dateien als UTF-8 ohne BOM gespeichert, bis auf die Datei, die die PDF erzeugt. Die ist als ANSI abgespeichert. Innerhalb dieser Datei rufe ich Session Variablen ab, die jedoch statt mit Sonderzeichen und Umlaute als Fragezeichen dargestellt werden.

    Einer meiner Variablen ist zB:

    echo $_SESSION[reporting][patient][firstname];
    // Ausgabe: J?rgen

    oder

    echo $variable;
    // Ausgabe: Die H?user sind sch?n???

    Dann habe ich den Befehl utf8_decode() genutzt und dann sah das so aus:

    echo utf8_decode($_SESSION[reporting][patient][firstname]);
    // Jürgen

    oder

    echo utf8_decode($variable);
    // Ausgabe: Die Häuser sind schön!!!

    Das geht auch mit allen anderen Variablen. Konnte ich dir damit helfen?
    LG Kevin

  3. Hallo,

    ich nutze den XTC Shop 3.04 SP2.1 und das PDF Katalog Modul von Imedes.

    Da die jungs offline zu sein scheinen kann ich nur hier fragen:

    Nach der Umstellung auf UTF-8 ist natürlich auch der Katalog nur noch halb so schön.

    Wie könnte ich denn die Zeichen
    ö für ö oder ö für das ü… mit der funktion
    utf8_decode()
    in form bringen?

  4. Hallo,
    Also von diesem Shop System habe ich noch nie gehört – ich kann daher dazu nicht sagen. Als Tipp: Finde heraus, wie die Informationen zu der pdf zusammengefasst werden. Finde die Variablen und setze dort das utf8_decode ein. Also: utf8_decode($variableMitDenInformationen)

    Wenn du weiterkommst, poste doch bitte deine Erfahrungen.

  5. Danke für diesen Tipp, hat mir viel Zeit erspart und funst wunderbar!!!

  6. Vielen Dank für deinen Hinweis, genau das, was ich gesucht habe!

  7. yo.. thanks for )

  8. Danke vielmals! Genau das was ich suchte!

    Gruss aus der Schweiz
    rexxi

  9. Ich hab auch ein UTF-8 Problem beim erzeugen einer PDF. Umlaute werden als RAUTE mit Fragezeichen dargestellt. Wenn ich nun dein Vorschlag mit utf8_decode nutze, dann sind es keine Rauten mehr sondern FRAGEZEICHEN … ich weiß keine Lösung mehr?!?

  10. „utf8_encode“ hat die Lösung gebracht 🙂

    Frohe Weihnachten und guten Rutsch 🙂

    Greetz
    Sven

  11. Ja, das freut mich 🙂
    Gut zu wissen, dass das auch hilft.

    Ich wünsche ebenfalls ein frohes Fest und ein gutes neues Jahr.

    LG

  12. danke danke danke danke…

    so simple und doch so effektreich.. hast mir echt geholfen =D

  13. Neben UTF-8 hat sich in manchen Fällen auch iso-8859-15 als Zeichensatz mit deutschen Sonderzeichen bewährt.

  14. utf8_decode() hat geholfen. Danke!

  15. Vielen Dank, das half auch mir 🙂

  16. Puh, hat mir jetzt viel Suchen erspart.

  17. Danke, konnte ich auch gebrauchen.

  18. leider will es bei mir nicht funktioneren ;(

    hier mal mein code

    SetFont(‚Arial‘,’B‘,16);
    $this->Cell(0,6,’Quittüung‘,0,1,’C‘);
    $this->Ln(10);

    //Ensure table header is output
    parent::Header();
    }
    }

    //Connect to database
    mysql_connect(‚localhost‘,’name‘,‘!!pw!!‘);
    mysql_select_db(‚db‘);

    $pdf=new PDF();
    $pdf->AddPage(L);

    //First table: put all columns automatically
    $pdf->Table(’select Name,Vorname,Autor,Titel from buecherfertig_relue‘);
    $pdf->AddCol(‚Name‘);
    $pdf->AddCol(‚Vorname‘);
    $pdf->AddCol(‚Autor‘);
    $pdf->AddCol(‚Titel‘);

    $pdf->SetXY (10,40);
    $pdf->SetFontSize(10);
    $pdf->Write(5,’Das oben genannte Buch wurde erfolgreich am:‘);
    $pdf->Cell(5,5,““.date(„d.m.Y“).““, FALSE);
    $pdf->Write(5,““.$timestamp.““);// nur der Text ohne Zelle
    $pdf->SetXY (105,40);
    $pdf->SetFontSize(10);
    $pdf->Write(5,’zurückgegeben‘);
    $pdf->SetXY (10,45);
    $pdf->SetFontSize(8);
    $pdf->Write(5,’Danke für ihr Vertrauen ;)‘);

    $pdf->SetXY (10,60);
    $pdf->SetFontSize(10);
    $pdf->Write(10,’Folgende Bücher haben Sie noch!‘);
    $pdf->SetXY (10,80);
    $pdf->Table(’select Name,Vorname,Autor,Titel from buecherfertig2_relue‘);
    $pdf->AddCol(‚Name‘);
    $pdf->AddCol(‚Vorname‘);
    $pdf->AddCol(‚Autor‘);
    $pdf->AddCol(‚Titel‘);

    $pdf->Output();
    ?>

    in name sind namen mit z.b. ü und diese werden als Lüth dargestellt ;(

  19. Vielen Dank, einfache + schnelle Lösung für mein Problem!

  20. Verwandele mal

    $pdf->AddCol(‘Name’);
    $pdf->AddCol(‘Vorname’);
    $pdf->AddCol(‘Autor’);
    $pdf->AddCol(‘Titel’);

    in

    $pdf->utf8_decode(AddCol(‘Name’));
    $pdf->utf8_decode(AddCol(‘Vorname’));
    $pdf->utf8_decode(AddCol(‘Autor’));
    $pdf->utf8_decode(AddCol(‘Titel’));

    Gruß und frohe Weihnachten xD

  21. Danke. Hat funktioniert.

  22. Ich habe das Problem in der Weise lösen können, dass ich den im PDF auszugebenden Text bevor ich ihn in die Sessionvariable geschrieben habe, die dann FPDF übergeben wird, mit iconv() kovertiert habe, also

    $_SESSION[’sessionvariablenname‘] = iconv(‚UTF-8‘, ‚ASCII//TRANSLIT‘, $meinText);


Hinterlasse einen Kommentar

Kategorien