Zobrazují se příspěvky se štítkemczech. Zobrazit všechny příspěvky
Zobrazují se příspěvky se štítkemczech. Zobrazit všechny příspěvky

středa 9. května 2012

PDF renderování a čeština

Včera jsem měl za úkol vyřešit problém s kódováním češtiny v PDF dokumentu. Kolegové, kteří na tom dělali, si nevěděli rady (nebo se s tím nechtěli párat), tak to přesunuli na mě...
V projektu používáme plugin Grails Rendering pro generování PDF souboru. Používání bylo jednoduché, jenže zase české znaky se nezobrazovaly. Bylo potřeba přidat správný font.

@font-face {
        src: url(file:c:/windows/fonts/arialuni.ttf);
        -fs-pdf-font-embed: embed;
        -fs-pdf-font-encoding: Identity-H;
}
Takhle se vše zobrazovalo správně. Problém byl ale v tom, že odkaz na font byl funkční jen pro Windows. OK, tak prostě se ten soubor s fontem zkopíroval do web-app/font složky (složka s HTML a CSS a obrázky, která se nekompiluje). Komplikací poté ale bylo, že nešlo na ten soubor odkazovat:

@font-face {
        src: url(file:${resource(dir:'font', file: 'ARIALUNI.TTF')});
        -fs-pdf-font-embed: embed;
        -fs-pdf-font-encoding: Identity-H;
}
A hned NullPointerException. Naštěstí jsem pak našel na StackOverlow, jak to někdo také řešil. A také jsem přehlídl důležitou větu v manuálu (RTFM): All links to resources (e.g. images, css) must be accessible by the application . This is due to the linked resources being accessed by application and not a browser. Takže řešením bylo nějak takhle (na soubor se muselo odkazovat jako na soubor z PC, ne přes URL):

@font-face {
        src: url(file:${czechFontPath});
        -fs-pdf-font-embed: embed;
        -fs-pdf-font-encoding: Identity-H;
}



středa 15. února 2012

Grails aplikace na Jelastic.com

Deployment na tento server je vcelku jednoduchý. Existuje totiž oficiální návod přímo od Jelastic. Co v návodu chybí, je konfigurace databáze. Na to však existuje jiný návod, který lze aplikovat pro Grails aplikace. Po rozběhnutí a první navštívení aplikace vypadá vše ok, ale pak ouvej. Když jsem si chtěl vytvořit záznam s českými znaky, do MySQL databáze se místo nich uložily "?".
Moje první podezření padlo na databázi a nastavení Collation. Měl jsem nastavený utf-8-cs, takže to bylo v pořádku. I jednotlivé tabulky a řádky byly stejně nastavené. Takže tím to nebylo.
Po chvíli googlování jsem měl další podezření. Mohlo by to nastat při zasílání požadavku ze stránek, kdy české znaky se kódují jako entity. Vypsal jsem si tedy v controlleru tyto hodnoty, a zjistil jsem, že to také nebylo ono.
Nakonec jsem našel tuto diskusi: http://stackoverflow.com/questions/3064644/character-encoding-problem-spring (big up této diskusi). Stačilo doplnit na konci jdbc url parametr ?useUnicode=yes&characterEncoding=UTF-8