Weiß jemand, wie man die Codierung im FPDF-Paket auf utf-8 setzt? Oder zumindest nach ISO-8859-7 (Griechisch), die griechische Zeichen unterstützen?
Grundsätzlich möchte ich eine PDF-Datei mit griechischen Zeichen erstellen.
Irgendwelche Vorschläge würden helfen. George
unicode
utf-8
character-encoding
fpdf
Yorgos
quelle
quelle
Antworten:
Verwenden Sie keine UTF-8-Codierung. Standard-FPDF-Schriftarten verwenden ISO-8859-1 oder Windows-1252. Es ist möglich, eine Konvertierung nach ISO-8859-1 durchzuführen mit
utf8_decode()
:$str = utf8_decode($str);
Einige Zeichen wie Euro werden jedoch nicht korrekt übersetzt. Wenn die iconv-Erweiterung verfügbar ist, gehen Sie wie folgt vor:$str = iconv('UTF-8', 'windows-1252', $str);
quelle
Es gibt auch eine offizielle UTF-8-Version von FPDF namens tFPDF http://www.fpdf.org/en/script/script92.php
Sie können einfach vom ursprünglichen FPDF wechseln. Stellen Sie jedoch sicher, dass Sie auch eine Unicode-Schriftart verwenden, wie im Beispiel im obigen Link oder in meinem Code gezeigt:
Ich denke, es ist viel eleganter, dies zu verwenden, anstatt überall utf8_decode () zu spammen, und die Möglichkeit, .ttf-Dateien direkt in AddFont () zu verwenden, ist ebenfalls ein Vorteil.
Jede andere Antwort hier ist nur eine Möglichkeit, das Problem zu vermeiden oder zu umgehen, und das Vermeiden von UTF-8 ist keine echte Option für ein aktuelles Projekt.
Es gibt auch Alternativen wie mPDF oder TCPDF (und andere), die auf FPDF basieren, aber erweiterte Funktionen bieten, UTF-8-Unterstützung bieten und HTML-Code interpretieren können (natürlich eingeschränkt, da es keine direkte Möglichkeit gibt, HTML in PDF zu konvertieren). Der größte Teil des FPDF-Codes kann direkt in diesen Bibliotheken verwendet werden, sodass die Migration des Codes recht einfach ist.
https://github.com/mpdf/mpdf http://www.tcpdf.org/
quelle
Für dieses Problem gibt es eine wirklich einfache Lösung.
Gehen Sie in der Datei fpdf.php zu der Zeile mit der Aufschrift:
Es ist Zeile 648 in meiner Version von fpdf. Fügen Sie die folgende Codezeile ein:
(über der Codezeile)
Dies funktioniert für alle deutschen Sonderzeichen und sollte auch für griechische Sonderzeichen funktionieren. Andernfalls ersetzen Sie einfach cp1252 durch das gewünschte Alphabet. Sie können alle unterstützten Zeichen hier sehen: http://en.wikipedia.org/wiki/Windows-1252
Ich habe die Lösung hier gesehen: http://fudforum.org/forum/index.php?t=msg&goto=167345 Bitte verwenden Sie meinen obigen Beispielcode, da der ursprüngliche Autor vergessen hat, einen Bindestrich zwischen utf und 8 einzufügen.
Hoffe das obige war hilfreich.
Daan
quelle
Sie müssen zuerst eine Schriftart generieren. Sie müssen das
MakeFont
im FPDF-Paket enthaltene Dienstprogramm verwenden. Ich habe unter Linux dieses etwas erweiterte Skript aus der Demo verwendet:Dann habe ich generierte Dateien in das
font
Verzeichnis meines Webs kopiert und Folgendes verwendet:(Ich habe an einem Tisch gearbeitet.) Das hat für meine Sprache funktioniert ( Buňka jedna ist tschechisch für Zelle eins ). Die tschechische Sprache gehört zu den mitteleuropäischen Sprachen, auch ISO-8859-2. Leider ist der Benutzer von FPDF gezwungen, die Vorteile der UTF-8-Codierung zu verlieren. Sie können dies nicht in Ihrem PDF erhalten:
Der dänische Buchstabe
ø
wirdř
in ISO-8859-2.Lösungsvorschlag: Sie müssen eine griechische Schriftart erhalten, die Schriftart mit der richtigen Codierung (ISO-8859-7) generieren und
iconv
mit derselben Zielcodierung verwenden, mit der die Schriftart generiert wurde.quelle
Es gibt eine Erweiterung von FPDF namens mPDF, die Unicode-Schriftarten zulässt.
http://www.mpdf1.com/mpdf/index.php
quelle
Diese Antwort hat bei mir nicht funktioniert, ich musste auch die HTML-Dekodierung für die Zeichenfolge ausführen. Sehen
Requisiten gehen von html_entity_decode in FPDF an emfi (unter Verwendung der tFPDF-Erweiterung)
quelle
Keine der oben genannten Lösungen wird funktionieren.
Versuche dies:
quelle
Sie können eine Klasse erstellen, um FPDF zu erweitern, und dies hinzufügen:
}}
quelle
Ich wollte dies für alle beantworten, die aus irgendeinem Grund nicht auf TFPDF umgestellt haben (Framework-Integration usw.).
Gehen Sie zu: http://www.fpdf.org/makefont/index.php
Verwenden ein
.ttf
kompatible Schriftart für die Sprache, die Sie verwenden möchten. Stellen Sie sicher, dass Sie die für Ihre Sprache korrekte Codierungsnummer auswählen. Laden Sie die Dateien herunter und fügen Sie sie in Ihr aktuelles FPDF-Schriftverzeichnis ein.Verwenden Sie diese Option, um die neue Schriftart zu aktivieren:
$pdf->AddFont($font_name,'','Your_Font_Here.php');
Dann können Sie
$pdf->SetFont
normal verwenden.Verwenden Sie in der Schriftart selbst iconv, um in UTF-8 zu konvertieren. Wenn Sie beispielsweise Hebräisch verwenden, würden Sie dies tun
iconv('UTF-8', 'windows-1255', $first_name)
.Ersetzen Sie die Windows-Codierungsnummer durch Ihre Sprachcodierung.
Für rechts nach links macht eine schnelle Lösung so etwas wie
strrev(iconv('UTF-8', 'windows-1255', $first_name))
.quelle
Bearbeiten Sie einfach die Funktionszelle in der Datei fpdf.php und suchen Sie nach der Zeile, die so aussieht
nach dem Finden der Linie
schreibe nach dem
{
,Speichern Sie die Datei und fertig, die Akzente und die utf8-Codierung funktionieren :)
quelle
Wie erstelle ich PDFs in FPDF, die Chinesisch, Japanisch, Russisch usw. unterstützen?
(Schnappschüsse des unten verwendeten Codes)
Ich möchte Folgendes bereitstellen: eine Zusammenfassung des Problems, die Lösung, ein Github-Projekt mit dem Arbeitscode und ein Online-Beispiel mit dem erwarteten, resultierenden PDF.
Das Problem :
Sie benötigen tatsächlich eine Schriftart, die die von Ihnen verwendeten UTF-8-Zeichen unterstützt.
IE, nur Helvetica zu verwenden und zu versuchen, Japanisch anzuzeigen, wird nicht funktionieren. Wenn Sie Font Forge oder ein anderes Schriftwerkzeug verwenden, können Sie zu den chinesischen Schriftzeichen der Schrift scrollen und feststellen, dass diese leer sind.
Google hat eine Schriftart ( Noto-Schriftart ), die alle Sprachen enthält, und sie ist 20 MB groß. Dies sind normalerweise mehrere Faktoren für die Größe Ihres Textes. Sie können also sehen, warum viele Schriftarten einfach nicht jede einzelne Sprache abdecken.
Die Lösung :
Ich verwende die Schriftpakete round-mgenplus-20140828.ttf und ZCOOL_QingKe_HuangYou.ttf für Japanisch und Chinesisch, die Open Source sind und in vielen Open Source-Projekten enthalten sind. In tFPDF selbst oder einer neuen vererbenden Klasse davon
class HTMLtoPDF extends tFPDF {...}
tun Sie dies wie folgt ...Sollte nichts mehr dran sein!
Code-Paket auf GitHub:
https://github.com/HoldOffHunger/php-html-to-pdf
Arbeiten, Online-Demo von Japanisch:
https://www.earthfluent.com/privacy.pdf?language=ja
quelle
Für Nachkommen.
Wie ich es geschafft habe, fpdf auf meinem Linux-Computer mit russischer Sprache zu versehen:
1) Gehen Sie zu http://www.fpdf.org/makefont/ und konvertieren Sie Ihre ttf-Schriftart (z. B. AerialRegular.ttf) mit der ISO-8859-5-Codierung in 2 Dateien : AerialRegular.php und AerialRegular.z
2) Setzen Sie diese 2 - Dateien in fpdf / font - Verzeichnis
3) Verwenden Sie es in Ihrem Code:
quelle
Anstelle dieser iconv-Lösung:
Sie könnten Folgendes verwenden:
Siehe: Wie konvertiere ich Windows-1252 Zeichen in Werte in PHP?
quelle
Es gibt eine Erweiterung von FPDF namens UFDPF http://acko.net/blog/ufpdf-unicode-utf-8-extension-for-fpdf/
Aber imho, es ist besser, mpdf zu verwenden, wenn Sie die Klasse wechseln können.
quelle
Sie können diese Funktion auf Ihren Text anwenden:
Vielen Dank
quelle
Ich verwende FPDF für ASP und die iconv-Funktion ist nicht verfügbar. Es scheint seltsam, dass ich das UTF-8-Problem gelöst habe, indem ich dem PDF direkt nach der Funktion AddPage () ein gefälschtes Bild (ein 1x1px-JPEG) hinzugefügt habe:
Auf diese Weise werden akzentuierte Zeichen korrekt zu meinem PDF hinzugefügt. Fragen Sie mich nicht warum, aber es funktioniert.
quelle
Ich bin mir nicht sicher, ob es für Griechisch funktioniert, aber ich hatte das gleiche Problem für brasilianisch-portugiesische Schriftzeichen und meine Lösung bestand darin, HTML-Entitäten zu verwenden. Ich hatte im Grunde zwei Fälle:
Für diese habe ich es zuerst in HTML-Entitäten mit codiert
htmlentities()
und dann in dekodiertiso-8859-1
. Beispiel:Für diese habe ich gerade den
htmlentities()
Ruf verlassen. Beispiel:Dann ging ich
$s
zu FPDF, wie in diesem Beispiel:Hinweis:
ENT_COMPAT | ENT_HTML401
ist der Standardwert für Parameter 2, wie in http://php.net/manual/en/function.html-entity-decode.phpHoffentlich hilft das.
quelle
Ich weiß, dass diese Frage alt ist, aber ich denke, meine Antwort würde denen helfen, die in anderen Antworten keine Lösung gefunden haben. Mein Problem war also, dass ich keine kroatischen Zeichen in meinem PDF anzeigen konnte. Erstens habe ich FPDF verwendet, aber ich denke, es unterstützt Unicode nicht. Was mein Problem schließlich gelöst hat, ist tFPDF, die Version von FPDF, die Unicode unterstützt. Dies ist das Beispiel, das für mich funktioniert hat:
quelle