Czy ktoś wie jak ustawić kodowanie w pakiecie FPDF na utf-8? Lub przynajmniej ISO-8859-7 (grecki), który obsługuje greckie znaki?
Zasadniczo chcę utworzyć plik pdf zawierający greckie znaki.
Wszelkie sugestie byłyby pomocne. Jerzy
unicode
utf-8
character-encoding
fpdf
yorgos
źródło
źródło
Odpowiedzi:
Nie używaj kodowania UTF-8. Standardowe czcionki FPDF używają ISO-8859-1 lub Windows-1252. Możliwe jest wykonanie konwersji do ISO-8859-1 z
utf8_decode()
:$str = utf8_decode($str);
Jednak niektóre znaki, takie jak Euro, nie zostaną poprawnie przetłumaczone. Jeśli rozszerzenie iconv jest dostępne, właściwy sposób jest następujący:$str = iconv('UTF-8', 'windows-1252', $str);
źródło
Istnieje również oficjalna wersja FPDF UTF-8 o nazwie tFPDF http://www.fpdf.org/en/script/script92.php
Możesz łatwo przełączyć się z oryginalnego FPDF, po prostu upewnij się, że używasz również czcionki Unicode, jak pokazano w przykładzie w powyższym linku lub moim kodzie:
Myślę, że bardziej eleganckie jest używanie tego zamiast rozsyłania wszędzie utf8_decode (), a możliwość używania plików .ttf bezpośrednio w AddFont () jest również zaletą.
Każda inna odpowiedź to tylko sposób na uniknięcie lub obejście problemu, a unikanie UTF-8 nie jest prawdziwą opcją dla aktualnego projektu.
Istnieją również alternatywy, takie jak mPDF lub TCPDF (i inne), które opierają się na FPDF, ale oferują zaawansowane funkcje, obsługują UTF-8 i mogą interpretować kod HTML (oczywiście ograniczone, ponieważ nie ma bezpośredniego sposobu konwersji HTML do PDF). Większość kodu FPDF może być używana bezpośrednio w tych bibliotekach, więc migracja kodu jest dość łatwa.
https://github.com/mpdf/mpdf http://www.tcpdf.org/
źródło
istnieje naprawdę proste rozwiązanie tego problemu.
W pliku fpdf.php przejdź do wiersza, który mówi:
To wiersz 648 w mojej wersji fpdf. Wstaw następujący wiersz kodu:
(nad linią kodu)
Działa to dla wszystkich niemieckich znaków specjalnych i powinno również działać dla greckich znaków specjalnych. W przeciwnym razie po prostu zamień cp1252 na odpowiedni alfabet, którego potrzebujesz. Możesz zobaczyć wszystkie obsługiwane znaki tutaj: http://en.wikipedia.org/wiki/Windows-1252
Widziałem rozwiązanie tutaj: http://fudforum.org/forum/index.php?t=msg&goto=167345 Proszę użyć mojego przykładowego kodu powyżej, ponieważ oryginalny autor zapomniał wstawić myślnik między utf a 8.
Mam nadzieję, że powyższe było pomocne.
Daan
źródło
Najpierw musisz wygenerować czcionkę. Należy użyć
MakeFont
narzędzia zawartego w pakiecie FPDF. Użyłem w Linuksie tego nieco rozszerzonego skryptu z wersji demonstracyjnej:Następnie skopiowałem wygenerowane pliki do
font
katalogu mojej sieci i użyłem tego:(Pracowałem na stole). To działało w moim języku ( Buňka jedna to czes. Cell one ). Język czeski należy do języków środkowoeuropejskich, również ISO-8859-2. Niestety, użytkownik FPDF jest zmuszony do utraty zalet kodowania UTF-8. Nie możesz tego dostać w swoim pliku PDF:
Duńska litera
ø
staje sięř
ISO-8859-2.Sugestia rozwiązania: Musisz zdobyć czcionkę grecką, wygenerować czcionkę za pomocą odpowiedniego kodowania (ISO-8859-7) i używać
iconv
tego samego kodowania docelowego, z którym została wygenerowana czcionka.źródło
Istnieje rozszerzenie FPDF o nazwie mPDF, które zezwala na czcionki Unicode.
http://www.mpdf1.com/mpdf/index.php
źródło
Ta odpowiedź nie zadziałała dla mnie, musiałem również uruchomić dekodowanie html na łańcuchu. Widzieć
Rekwizyty trafiają do emfi z html_entity_decode w FPDF (przy użyciu rozszerzenia tFPDF)
źródło
Żadne z powyższych rozwiązań nie zadziała.
Spróbuj tego:
źródło
Możesz utworzyć klasę rozszerzającą FPDF i dodać to:
}
źródło
Chciałem odpowiedzieć na to pytanie każdemu, kto nie przeszedł na TFPDF z jakiegokolwiek powodu (integracja frameworka itp.)
Idź do: http://www.fpdf.org/makefont/index.php
Użyj
.ttf
kompatybilnej czcionki dla języka, którego chcesz używać. Upewnij się, że wybrałeś numer kodowania odpowiedni dla Twojego języka. Pobierz pliki i wklej je do bieżącego katalogu czcionek FPDF.Użyj tego, aby aktywować nową czcionkę:
$pdf->AddFont($font_name,'','Your_Font_Here.php');
Wtedy możesz
$pdf->SetFont
normalnie używać .Na samej czcionce użyj iconv, aby przekonwertować na UTF-8. Więc jeśli na przykład używasz hebrajskiego, zrobisz to
iconv('UTF-8', 'windows-1255', $first_name)
.Zastąp numer kodowania systemu Windows kodowaniem swojego języka.
W przypadku strony od prawej do lewej szybką naprawą jest zrobienie czegoś takiego
strrev(iconv('UTF-8', 'windows-1255', $first_name))
.źródło
po prostu wyedytuj komórkę funkcji w pliku fpdf.php, poszukaj linii, która wygląda następująco
po znalezieniu linii
napisz po
{
,zapisz plik i gotowe, akcenty i kodowanie utf8 będą działać :)
źródło
Jak utworzyć pliki PDF w FPDF, które obsługują język chiński, japoński, rosyjski itp.?
(migawki używanego kodu poniżej)
Chciałbym podać: podsumowanie problemu, rozwiązanie, projekt github z działającym kodem oraz przykład online z oczekiwanym, wynikowym plikiem PDF.
Problem :
W rzeczywistości potrzebujesz czcionki, która obsługuje używane znaki UTF-8.
IE, samo używanie Helvetica i próba wyświetlenia japońskiego nie zadziała. Jeśli używasz Font Forge lub innego narzędzia do obsługi czcionek, możesz przewinąć do chińskich znaków czcionki i sprawdzić, czy są puste.
Google ma czcionkę (czcionkę Noto ), która zawiera wszystkie języki i jest to 20 MB, co zwykle stanowi kilka czynników wielkości tekstu. Możesz więc zobaczyć, dlaczego wiele czcionek po prostu nie obejmuje wszystkich języków.
Rozwiązanie :
Używam pakietów czcionek rounded-mgenplus-20140828.ttf i ZCOOL_QingKe_HuangYou.ttf dla języka japońskiego i chińskiego, które są open source i można je znaleźć w wielu projektach open source. W samym tFPDF lub nowej jego klasie dziedziczącej, na przykład
class HTMLtoPDF extends tFPDF {...}
, zrobisz to ...Nie powinno być nic więcej!
Pakiet kodu na GitHub:
https://github.com/HoldOffHunger/php-html-to-pdf
Działa, Demo online języka japońskiego:
https://www.earthfluent.com/privacy.pdf?language=ja
źródło
Dla potomstwa.
Jak udało mi się dodać język rosyjski do fpdf na moim komputerze z systemem Linux:
1) Przejdź do http://www.fpdf.org/makefont/ i przekonwertuj swoją czcionkę ttf (na przykład AerialRegular.ttf) do 2 plików przy użyciu kodowania ISO-8859-5 : AerialRegular.php i AerialRegular.z
2) Umieść te 2 pliki w fpdf / font katalogu
3) Użyj go w swoim kodzie:
źródło
Zamiast tego rozwiązania iconv:
Możesz użyć następujących:
Zobacz: Jak przekonwertować znaki Windows-1252 na wartości w php?
źródło
Istnieje rozszerzenie FPDF o nazwie UFDPF http://acko.net/blog/ufpdf-unicode-utf-8-extension-for-fpdf/
Ale, imho, lepiej jest używać mpdf, jeśli możesz zmienić klasę.
źródło
Możesz zastosować tę funkcję do swojego tekstu:
Dzięki
źródło
Używam FPDF dla ASP, a funkcja iconv nie jest dostępna. Wydaje się to dziwne, ponieważ rozwiązałem problem UTF-8, dodając fałszywy obraz (jpeg 1x1px) do pliku PDF, zaraz po funkcji AddPage ():
W ten sposób znaki akcentowane są poprawnie dodawane do mojego pliku PDF, nie pytaj mnie dlaczego, ale to działa.
źródło
Nie jestem pewien, czy to wystarczy dla greckiego, ale miałem ten sam problem ze znakami brazylijskiego portugalskiego i moim rozwiązaniem było użycie encji html. Miałem w zasadzie dwa przypadki:
W tym celu najpierw zakodowałem go do jednostek html,
htmlentities()
a następnie zdekodowałem doiso-8859-1
. Przykład:W tym celu po prostu
htmlentities()
zawołałem. Przykład:Następnie przeszedłem
$s
do FPDF, jak w tym przykładzie:Uwaga:
ENT_COMPAT | ENT_HTML401
to standardowa wartość parametru nr 2, jak w http://php.net/manual/en/function.html-entity-decode.phpMam nadzieję, że to pomoże.
źródło
Wiem, że to stare pytanie, ale myślę, że moja odpowiedź pomogłaby tym, którzy nie znaleźli rozwiązania w innych odpowiedziach. Mój problem polegał na tym, że nie mogłem wyświetlić chorwackich znaków w moim pliku PDF. Po pierwsze, użyłem FPDF, ale myślę, że nie obsługuje Unicode. Wreszcie, tym, co rozwiązało mój problem, jest tFPDF, czyli wersja FPDF obsługująca Unicode. Oto przykład, który zadziałał dla mnie:
źródło