A language is only as good as its developer is.

Zend_Pdf & Cirilica

Pastaruoju metu nemažai tenka dirbti su “Zend Framework” komponentais. Tad gal ir dažniau pasidalinsiu sunkumais ir sprendimais su kuriais susidūriau. Šiandien ant operacinio stalo Zend_Pdf komponentas.

Problema. Reikia sugeneruoti pdf’ą failą naudojant pdf šabloną, bei jį užpildyti kirilicos simboliai. Problema ta, kad ‘by default’ Zend_Pdf nepalaiko kirilica simbolių. Pavyzdinis kodas:

$pdf = new Zend_Pdf();
$pdf->pages[] = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
$pdfPage = $pdf->pages[0];
$pdfPage->setFont(
  Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA), 12);
$pdfPage->drawText(’This is my text.’, 72, 740, ‘UTF-8′);
$pdf->save('/somehere/on/the/machine/document.pdf');

Sprendimas. embed’inti šriftus. Siūlau naudoti šiuos šriftus. Tada eilutę ‘Zend_Pdf_Font::fontWithName()’ keičiam į ‘Zend_Pdf_Font::fontWithPath(‘/var/blah/dah/FreeSerif.ttf’)’ ir vuolia :) Po visos procedūros kodas tūrėtų atrodyti taip:

$pdf = new Zend_Pdf();
$pdf->pages[] = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
$pdfPage = $pdf->pages[0];
$pdfPage->setFont(
  Zend_Pdf_Font::fontWithPath('/var/blah/dah/FreeSerif.ttf'), 12);
$pdfPage->drawText(’This is my text.’, 72, 740, ‘UTF-8′);
$pdf->save('/somehere/on/the/machine/document.pdf');

Viso šio sprendimo minusas yra tas, jog gautas failo dydis pakinta keliais šimtais kilobaitų. Tačiau, lyginant su prieš tai tūrėtomis alternatyvomis, tai gautas failo dydis vistiek buvo ženkliai mažesnis.

Naudoti šaltiniai:

Be Sociable, Share!
  • http://medwezys.blogas.lt medwezys

    Joo, pdf generavimas ne pats įdomiausias darbas, bet tenka visiems su tuo susidurt. Rails plugine prawn tai visada reikia savo fontų path’ą nurodyt, tai matyt su kirilica net negalvočiau, iškart aišku būtų :)

  • http://www.virbicianskas.lt Andrius V.

    Embed’as turi vieną bėdą :) Jis prideda ~200 KB. Ir kelių KB pdf’as staiga virsta keliasdešimt kartų didesnis. Aišku yra galimybė kompresinti ir dar viskas priklauso nuo pačio fonto, bet šiai dienai kitos išeities nėra… Nors dabar žiūrau pdf supported charset’us, tai lyg ir palaiko crilica. Vadinasi, pats Zend’o pdf’as š mala :)

  • http://aur1mas.sektorius.info aur1mas

    Andriau, pabaigoje tą ir tūrėjau omenyje, kad minusas dėl dydžio pakitimo. ;)

    O dėl Zend_PDF ir kirilicos support’o. Tai manau, čia laikina problema. Nes dabar apskritai mažai šriftų jis dar palaiko :)

  • http://www.virbicianskas.lt Andrius V.

    My bad, nedaskaičiau :D

  • Vaidas

    Koks greitis generuojat cyrlica su zend pdf, man generuojasi 8-10s paprasti pavyzdžiai

  • http://aur1mas@devnet.lt aur1mas

    @Vaidas

    Aš su Zend_PDF dokumento nuo 0 negeneravau :) Naudojau šabloną ir į jį sudėjai tai ko man reikėjo ;)

    Šiaip, pdf generavimą aš nelabai mėgstu – tad, kai galiu stengiuosi išsisukti nuo to.

    Dabar išsisukinėju panaudodamas:
    http://code.google.com/p/wkhtmltopdf/

    Jis iš HTML paverčia į PDF. Labai patogu ir mažai vargo :)