Autor Zpráva
wabi
Profil *
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 *
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()
tak ti může vyhodit chybu, protože script už odeslal tuhel neviditelnou značku, každopádně zkus v tý třídě najít něco jako SetCharset nebo tak něco, nebo použít header pro nastavení kódování.
wabi
Profil *
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 *
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 *
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
wabi:
Zkus to HTML převést do UTF-8 pomocí iconv(). Mrkni jak to dělá třeba Nette Framework.
php
Profil
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 *
Díky za rady, odzkouším a pak řeknu jak to dopadlo :)
wabi
Profil *
[#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 *
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!
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..
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
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
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0