Seite 1 von 1

Umlaute (utf-8)

Verfasst: Fr 19. Mär 2010, 09:42
von josefkoller
Hallo,

ich habe gelesen, daß in einer Printausgabe (php-file), die mit fpdf gestaltet wird, keine Headerinfos, usw. enthalten sein dürfen.

Wie bekomme ich denn dann Umlaute in meine PDF-Ausgabe?

vielen Dank

Josef

Verfasst: Fr 19. Mär 2010, 15:31
von Wirus!
ich habe gelesen, daß in einer Printausgabe (php-file), die mit fpdf gestaltet wird, keine Headerinfos, usw. enthalten sein dürfen.

Wie bekomme ich denn dann Umlaute in meine PDF-Ausgabe?


Was haben Umlaute mit einem Header zu tun?

Generell gilt: Vergiss HTML, bei einem PDF hat der dem Browser übermittelte Header nichts mit dem Inhalt oder der Codierung zu tun.
Umlaute müssen als Ascii-Zeichen in cp1252 übergeben werden - keine HTML-Entities wie ä ; oder ä ; kein UTF-8

Verfasst: Sa 20. Mär 2010, 15:30
von josefkoller
Hallo,

ich habe mich vielleicht falsch ausgedrückt. Die Umlaute stehen so in der Datenbank. Bei der Ausgabe mittels fpdf steht dann eben nicht "Überlingen" sondern "......berlingen". die Punkte stehen für die Zeichen, die statt Ü generiert werden.

Wie bekomme ich mittels fpdf eben "Überlingen" in meine Ausgabe?

Danke nochmals

Josef

Verfasst: Sa 20. Mär 2010, 21:24
von Wirus!
Ich vermute mal, da steht nicht "......berlingen" sondern statt dem "Ü" genau zwei kryptische Zeichen wie "é"

Dann ist Dein Text in utf-8 codiert und muss erst in cp1252 übersetzt werden. Das geht mit [PHP]$str = utf8_decode($str);[/PHP] wobei $str Dein Text ist.

Alternativ kannst Du auch [PHP]$str = iconv('UTF-8', 'windows-1252', $str);[/PHP] verwenden, wenn es verfügbar ist.

iconv und utf8_decode klappen nicht...

Verfasst: Mo 6. Feb 2012, 06:28
von pd1983
Hallo,

ich versuche PDF's aus UFT-8 Daten zu schreiben...

Wenn ich den Text "normal" ausgebe habe ich das im PDF:
... UV-Lack hochglŠnzend vollflŠchig, einseitig

Wenn ich folgendes mache:

Code: Alles auswählen

$pdf->MultiCell(115, 3.8, utf8_decode($BELEGTTEXT), '0', 'L', 0);


erhalte ich diesen Text:
... [color="DarkRed"]UV-Lack hochgl?nzend vollfl?chig, einseitig[/color]

Versuche ich:

Code: Alles auswählen

$str = iconv('UTF-8', 'windows-1252', $BELEGTTEXT);
$pdf->MultiCell(115, 3.8, $str, '0', 'L', 0);


Wird der Text vor dem 1. Sonderzeichen abgeschnitten.

Die Texte kommen aus UTF-8 kodierten Dateien. Wo kann das Problem liegen?
Ein alternativer PDF-Viewer zeigt den Text sogar richtig an nur mit dem Adobe-Reader habe ich Probleme...

Verfasst: Mo 13. Feb 2012, 23:39
von Wirus!
[PHP]Wird der Text vor dem 1. Sonderzeichen abgeschnitten.
Die Texte kommen aus UTF-8 kodierten Dateien. Wo kann das Problem liegen?[/PHP]

Anleitungen lesen bildet. Das Manual für iconv()sagt (der letzte Satz ist interessant):
Der Ausgabe-Zeichensatz.

Wenn Sie die Zeichenkette //TRANSLIT an out_charset anhängen, wird die Transliteration aktiviert. Das bedeutet, dass ein Zeichen, das im Zielzeichensatz nicht dargestellt werden kann mit einem oder mehreren ähnlich aussehenden Zeichen annähernd dargestellt werden kann. Wenn Sie die Zeichenkette //IGNORE anhängen, werden diese nicht darstellbaren Zeichen ohne Warnung verworfen. Ansonsten wird str beim ersten illegalen Zeichen abgeschnitten und es wird eine E_NOTICE erzeugt.


Deine 'ä'-s scheinen keine echten 'ä'-s gemäß cp1252 zu sein bzw. das Textformat ist doch nicht UTF-8 ....
Daher output auskommentieren und E_NOTICE aktivieren (temporär) und schauen was los ist.

Re: Umlaute (utf-8)

Verfasst: Fr 1. Jul 2016, 11:32
von Anhur
Hallo

Der Thread ist ja schon etwas älter, aber der erste der bei Google auftauchte als ich das gleiche Problem hatte.
Die Variante an allen stellen mit utf_decode zu arbeiten an denen ich ein Aufruf von Cell oder MultiCell mache hat mir nicht gefallen.
Daher habe ich einfach eine neue Klasse eingeführt, die von FPDF erbt und dich ich dann anstelle von FPDF in meiner PDF Ausgabe verwende.
Das ganze sieht dann so:

Code: Alles auswählen

<?php
require('fpdf.php');

class utfFPDF extends FPDF
{
function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='')
   {
      if ($txt != ''){
         $txt = utf8_decode($txt);
      }
      parent::Cell($w, $h, $txt, $border, $ln, $align, $fill, $link);
   }
}


Somit wird jeder Text der in einem Cell Aufruf ausgegeben wird entsprechend kodiert. Da MultiCell auf Cell zurückgreift ist das auch erledigt.
Die Funktionen zum erzeugen in von Metainformationen bringen in der aktuellen FPDF Version ja schon einen Schalter für UTF mit und sollten somit hoffentlich schon funktionieren. Das habe ich aber nicht getestet.

Bei mir funktioniert die Ausgabe von Sonderzeichen in UTF8 kodierten Strings (aus einer Datenbank) hiermit problemlos.

Re: Umlaute (utf-8)

Verfasst: Mo 17. Okt 2016, 14:54
von pyth
Hey Anhur,

ich habe deine Klasse auch benutzt, aber mir fehlen Zeichen. Insbesondere das DOUBLE LOW-9 QUOTATION MARK sowie und dessen oberes Pendent.

hast du eine Idee, wie ich das noch nachtragen kann?

Viele Grüße

Jan

Re: Umlaute (utf-8)

Verfasst: Mo 20. Nov 2017, 20:39
von Harald
Einfach folgendes einbauen:

Code: Alles auswählen

$txt = iconv("UTF-8", "Windows-1252//TRANSLIT", $txt);

Entweder einzeln für jedes Textfeld oder aber einfach direkt in die fpdf.php integrieren (Siehe Zeile 622)

Code: Alles auswählen

if($txt!=='')
{
$txt = iconv("UTF-8", "Windows-1252//TRANSLIT", $txt);
...
}

Re: Umlaute (utf-8)

Verfasst: Mo 20. Nov 2017, 20:42
von Harald
Anhur hat geschrieben:Hallo

Der Thread ist ja schon etwas älter, aber der erste der bei Google auftauchte als ich das gleiche Problem hatte.
Die Variante an allen stellen mit utf_decode zu arbeiten an denen ich ein Aufruf von Cell oder MultiCell mache hat mir nicht gefallen.
Daher habe ich einfach eine neue Klasse eingeführt, die von FPDF erbt und dich ich dann anstelle von FPDF in meiner PDF Ausgabe verwende.
Das ganze sieht dann so:

Code: Alles auswählen

<?php
require('fpdf.php');

class utfFPDF extends FPDF
{
function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='')
   {
      if ($txt != ''){
         $txt = utf8_decode($txt);
      }
      parent::Cell($w, $h, $txt, $border, $ln, $align, $fill, $link);
   }
}


Somit wird jeder Text der in einem Cell Aufruf ausgegeben wird entsprechend kodiert. Da MultiCell auf Cell zurückgreift ist das auch erledigt.
Die Funktionen zum erzeugen in von Metainformationen bringen in der aktuellen FPDF Version ja schon einen Schalter für UTF mit und sollten somit hoffentlich schon funktionieren. Das habe ich aber nicht getestet.

Bei mir funktioniert die Ausgabe von Sonderzeichen in UTF8 kodierten Strings (aus einer Datenbank) hiermit problemlos.


Nette Idee, funktioniert aber leider nicht für ganz viele Zeichen. utf8_decode ist stark eingeschränkt. Deshalb lieber diese Lösung verwenden:

Code: Alles auswählen

$txt = iconv("UTF-8", "Windows-1252//TRANSLIT", $txt);