Autor | Zpráva | ||
---|---|---|---|
wabi Profil * |
#1 · Zasláno: 9. 8. 2011, 22:22:35
Ahoj,
mám problém s češtinou v mpdf. $pdf = new mPDF('utf-8','A4'); //$pdf->useOnlyCoreFonts = true; //$pdf->SetAutoFont(0); $pdf->SetDisplayMode('fullpage'); $pdf->SetProtection(array('print')); $pdf->SetTitle("Cklik.eu - Faktura"); $pdf->SetAuthor("Cklik.eu"); $stylesheet = file_get_contents('style.css'); $html = "<html>tělo dokumentu </html>"; $html = utf8_encode($html); $pdf->WriteHTML($stylesheet,1); $pdf->WriteHTML($html,2); $pdf->Output("soubor.pdf", "F"); Soubor to bez problémů uloží, žádná chyba se neobjeví, ale místo háčků a čárek jsou speciální znaky. V souboru mám nastaveno kódování utf-8, i soubor se skriptem je uložen v utf-8. Občas to ještě vyhodí hlášku že se objevili neplatné utf-8 znaky, a tak jsem tam ještě přidal: $pdf->ignore_invalid_utf8 = true; Ale to jenom tyto znaky ingoruje, takže místo speciálních znaků se neobjeví zhola nic. Neví někdo kde je problém? Předem díky! |
||
php Profil * |
#2 · Zasláno: 10. 8. 2011, 12:24:04
soubor se skriptem není moc dobrý ukládat v utf-8/utf-16, protože se může stát, že takový soubor bude mít na začátku tak zvanou BOM značku, takže pak když tam přidáš
header() |
||
wabi Profil * |
#3 · Zasláno: 10. 8. 2011, 19:53:05
O tomhle problému vím, ale žádné jiné znaky to na začátku určitě neodesílá, to se mi už stalo a hlásilo to příslušnou chybu. Teď není žádná chyba, jenom ta diakritika je pokažená. A jinak k tomu charsetu, kódování se nastavuje hned na prvním řádku v konstruktoru té třídy, takže myslím že to už má objekt nastavený na itf-8, nebo ne?
|
||
php Profil * |
#4 · Zasláno: 10. 8. 2011, 21:22:16
tak mně ještě napadá zkusit nějaký ty experimenty s header
header('Content-type: text/plain; charset=UTF-8'); header('Content-Transfer-Encoding: base64'); ale nevím, zda pomůže no http://www.cpress.cz/knihy/tcp-ip-bezp/CD-dalsi/CD-mime/mime2.htm tady k tomu máš kdyžtak něnajký to stručný, česky psaný, vysvětlení. |
||
wabi Profil * |
#5 · Zasláno: 11. 8. 2011, 19:46:36
Díky za zdroje, ale zatím bohužel nic. Kdyby tu byl někdo, kdo se již setkal s podobným problémem v mpdf, byl bych rád kdyby se podělil o informace :) Zatím díky!
|
||
Jake898 Profil |
#6 · Zasláno: 11. 8. 2011, 21:51:45
wabi:
Zkus to HTML převést do UTF-8 pomocí iconv(). Mrkni jak to dělá třeba Nette Framework. |
||
php Profil |
#7 · Zasláno: 11. 8. 2011, 21:58:33 · Upravil/a: php
ještě takovej malý postřeh
$pdf = new mPDF(); $pdf->WriteHTML("<h1>ěščřžýáíéúů</h1>"); $pdf->Output("test.pdf", "F"); Takhle mi to uložilo ten kód naprosto normálně, žádný znaky pro průměr atd. verze - mPDF v5.3 Full installation 12.2MB: http://www.mpdf1.com/mpdf/download |
||
wabi Profil * |
#8 · Zasláno: 11. 8. 2011, 23:28:10
Díky za rady, odzkouším a pak řeknu jak to dopadlo :)
|
||
Časová prodleva: 3 dny
|
|||
wabi Profil * |
#9 · Zasláno: 14. 8. 2011, 13:41:08
[#7] php
Tak to je divný, zkusil jsem přesně tenhle tvůj kód se stejnou verzí mPDF a výsledek je tahle chyba: HTML contains invalid UTF-8 character(s) [[#236]][[#154]][[#232]][[#248]][[#158]][[#253]][[#225]][[#237]][[#233]][[#250]][[#249]] mPDF error: A další divná věc je, že například znak "ž", mi to na některých místech dokumentu zobrazuje správně a na jiných ne. [#6] Jake898 Zkoušel jsem, ale zatím bez úspěchu. Možná že je problém i v tom, že já vlastně nevím v jakém kódování to ve výchozím stavu je? - dokument má nastavené kódování na utf-8, ale nevím jaké kódování mám nastavit jako to, ze kterého se to má převést. |
||
wabi Profil * |
#10 · Zasláno: 14. 8. 2011, 14:13:57
Tak se mi to nakonec podařilo vyřešit! Problém byl v tom, že ten kód, ze kterého se skládalo pdf byl kompinací textu (s diakritikou) a výpisů z databáze (taky s diakritikou). Ačkoliv měl soubor, kódování mysql i mpdf nastaveno UTF-8, tak to dělalo problémy, takže když se mi podařilo vyřešit zobrazení znaků z databáze, tak se pokazily zase ty ze souboru - a toho jsem si doteď nevšiml.
Takže finální a funkční kód, kdyby někdo měl zájem shlédnout: $pdf = new mPDF('utf-8','A4'); $pdf->SetDisplayMode('fullpage'); $pdf->SetProtection(array('print')); $stylesheet = file_get_contents('style.css'); $html = "<html>tělo dokumentu </html>"; $html = iconv('windows-1250', 'UTF-8', $html); $pdf->WriteHTML($stylesheet,1); $pdf->WriteHTML($html,2); $pdf->Output("soubor.pdf", "F"); Ovšem s tím, že všechny proménné načítané z databáze jsem v textu musel uzavřít ještě do funkce (jelikož mám databázi nastavenou na utf-8): iconv('UTF-8', 'windows-1250', $string); Děkuji všem za pomoc! |
||
Časová prodleva: 3 roky
|
|||
quatzael Profil |
Já teď řeším podobný problém.
Normálně tam mám: $mpdf = new mPDF('UTF-8');
Mám tem nějaký texty s diakritikou. Všechno mi až do teď běželo ok. Přesunul jsem nějaký text nahoru ze zdola scriptu (jen jsem zkopíroval a vložil pár řádků obsahující diakritiku v rámci jednoho scriptu) a začalo mi to blbnout. Háže to tuhle chybu. HTML contains invalid UTF-8 character(s) Warning: Cannot modify header information - headers already sent by (output started at /www/domena.cz/mpdfa/mpdf.php:30919) in /www/domena.cz/mpdfa/mpdf.php on line 1706 mPDF error: Když dole v dokumentu vyzkouším zadat $html = "ěščřžýáíé"; tak to funguje, ale nahoře ne. Takže to vypadá nějak takto: $html = "Dlouhá, Hostivař"; //nefunguje //nějaký kód $html = "ěščřžýáíé"; //funguje $mpdf->WriteHTML($html); Prve mi to dokonce házelo chybu jen na to "á", pak jsem to zkoušel přepsat i to "ř" a začalo to házet chybu i tam.. Přitom když dole napíšu to "ěščřžýáíé", tak tam problém není. Mám to otevřený v PSPadu. Zkoušel jsem to otevřít i v poznámkovým bloku, ale tam nejde nastavit kódování. Někde musí být chyba, že celý ten dokument není v UTF-8 nebo já nevím.. |
||
Časová prodleva: 2 měsíce
|
|||
Nobbie Profil |
quatzael:
podařilo se ti to nějak vyřešit? Právě s tím bojuju a nedaří se mi na to nijak přijít. Marně hledám všude možně i na stránkách mpdf, ale všude se akorát píše jak to funguje, ale přitom nefunguje. Mám problém jakmile to začne tahat data z DB, pak to má problém s diakritikou, ale normálně v dokumentu čistě napsaný text to bere. Mám to vzatý přes iconv(), ale nejede to. Data z DB, to prostě nevezme správně. DB mám v UTF-8 a opravdu nevím, co udělat, aby to šlo. Ještě pro upřesnění: $pdf = new mPDF('utf-8','A4'); $html = '<span>'.$radek_tisk_faktura["faktura_uzivatel_jmeno"].'</span>'; // jméno má být Lukáš (píše - LukAˇĹˇ) $html = iconv('windows-1250', 'UTF-8', $html); $pdf->WriteHTML($html); Dokument je v CP1250 (jakmile ho uložím jako UTF-8, pro jistotu se nic už nezobrazí). Vědel by někdo případně co s tím? EDIT Hurá...pro všechny kdo stále nějak tápou, tohle mi pomohlo - hokus pokus a kouzlo mi vykouzlilo výsledek: $pdf = new mPDF('utf-8','A4'); $html = '<span>'.$radek_tisk_faktura["faktura_uzivatel_jmeno"].'</span>'; // jméno má být Lukáš (píše - Lukáš) $html = iconv('UTF-8', 'UTF-8', $html); $pdf->WriteHTML($html); Pozor - dokument musí být uložen jako UTF-8. Snad to někomu pomůže... |
||
quatzael Profil |
#13 · Zasláno: 16. 4. 2015, 14:53:03
Nobbie:
Ahoj, včera jsem se k tomu už nedostal, abych napsal. Ještě jsem to právěže nevyřešil, protože jsem opravdu nevěděl jak, takže jsem se přesunul k jiným věcem (u těch taky teď nevím, tak se asi zpátky vrátím k dokončení toho mpdf). Takže Ty to máš už vyřešený? Tak gratuluju!! Takže celý to řešení spočívá v tom, že tam vložíš tohle? $html = iconv('UTF-8', 'UTF-8', $html); Supr, vyzkouším to. Díky moc! |
||
quatzael Profil |
#14 · Zasláno: 16. 4. 2015, 20:50:25
Nobbie:
„Pozor - dokument musí být uložen jako UTF-8. Snad to někomu pomůže...“ Co tím konkrétně myslíš? Např. nastavit v PSPadu formát UTF-8? Mě to nepomáhá.. Když dám výpis do prohlížeče, tak mi to např. místo "á" vypisuje: [[#195]] [[#161]] a místo "ř": [[#197]] [[#153]] .
V pdf souboru ty písmenka s diakritikou úplně vynechá.. A když tam vložím to Tvoje: $html = iconv('UTF-8', 'UTF-8', $html); m tak mi to vyhodí varování: Warning: Division by zero
|
||
quatzael Profil |
#15 · Zasláno: 17. 4. 2015, 07:37:02
Tak už jsem to vyřešil i já!!
Nakonec za to nemohlo mpdf, ale funkce str_split , kterou tam mám. Řešení je tady: Špatné kódování v array.
|
||
Časová prodleva: 9 let
|
0