Baigi fiksi vajadzēja savākt kaudzi ar datiem (no datu bāzes) un izdrukāt ģenerētos pdf failos. Protams, ar nosacījumu, ka latviešu valodas burtu vietā nerādās ķeburi vai kvadrātiņi (t.i. ar UTF-8 atbalstu). Izrādās, ka tas nav tik vienkārši izdarāms. Galu galā izdevās un tādēļ, ka interneta pasaulē nav tik daudz informācijas par šo tēmu, īsi un bez plašiem paskaidrojumiem uzdrukāju kā to var izdarīt.

Priekšnosacījumi: ir nokonfigurēts un strādājošs serveris ar php atbalstu.

Tātad, lai piedabūtu PDF ģenerēšanas pasākumu, ir nepieciešamas sekojošas lietas:

  1. TCPDF – http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf
  2. Barcode klase – http://www.mribti.com/barcode/download.php
  3. GD bibliotēka – http://www.libgd.org/FAQ_PHP#How_do_I_get_gd_to_work_with_PHP.3F


Darbības:

  1. TCPDF atarhivē uz servera
  2. Sakonfigurē TCPDF – failā tcpdf/config/tcpdf_config.php jānomaina 2 vērtības: pilnais ceļš līdz tcpdf direktorijai + adrese
  3. Barcode klasi atarhivē tcpdf direktorijā tcpdf/barcode/
  4. Aktivizē GD dll-u (instrukcija iepriekš norādītajā linkā)

Teorētiski šinī brīdī palaižot failu http://localhost/tcpdf/test_unicode.php, pārlūkam būtu jāpiedāvā saglabāšanai tikko izveidotais testa fails (dat.pdf). Bet, dzīvē, protams nekad tā nenotiek :) . Arī šoreiz ne.

Problēmas un risinājumi
Man programma lamājās par to, ka failā tcpdf.php nav atrasta metode getImage(). TCPDF neveiksmīgi mēģna izmantot šo klases barcode metodi. Parakņājos barcode klasē un tur tiešām tādas nebija. Eksperimenta pēc iekomentēju šo funkcijas izsaukumu failā tcpdf.php (+ vēl 2 rindiņas). Iekomentešana nostrādāja un nekādus manāmus negatīvus pēcefektus nemanīju.

Fails – tcpdf.php

//use a temporary file….
$tmpName = tempnam(K_PATH_CACHE,’img’);
// imagepng($obj->getImage(), $tmpName);
// $this->Image($tmpName, $x, $y, $w, $h, ‘png’);
// $obj->DestroyObject();
unset($obj);
unlink($tmpName);

Tas vēl nav viss. Drukājot ciklā, pdf neveidoja vairāk par ~10 lappusēm (izmeta kļūdu). Lai to atrisinātu jānomaina viena defaultā vērtība barcode kodā.

Fails – barcode/debug.php

define(__TIMEOUT__, 3);

uz define(__TIMEOUT__, 0);

Lielos vilcienos tas ir viss. Latviešu valodas korektu attēlojumu var pārbaudīt, nomainot faila utf8test.txt saturu uz kaut ko latvisku. Pēc tam tas tiks ielasīts uzģenerētajā failā. Lai teksti būtu latviski, pirms tam jānomaina fonts izmantojot komandu

$pdf->SetFont(”FreeSerif”, “”, 12);

5 Responses to “PDF ģenerēšana izmantojot PHP (UTF-8)”

  1. lasītājs Says:

    Es vienu gadu izmantoju FPDF (sen vairs netiek atjaunots, bet strādā tāpat). Tur gan vajag pāriet uz Cp1257.

    Bet šopavasar pārslēdzāmies uz Apache FOP http://xmlgraphics.apache.org/fop/

  2. dali Says:

    Ir arī vēl tāda lieta kā LaTeX. Programmētājiem noteikti patiktu, jo tā ir PDF (arī DVI vai PS) ģenerēšana izmantojot kaut ko līdzīgu programmēšanas valodai (ar visu kompilēšanu:). Pāšlaik ar to eksperimentēju. Mēģināšu šādā veidā rakstīt kursa darbu.

  3. ttt Says:

    Paldies par rakstu.
    Tieši šobrīd ir vajadzība pēc latvisku pdf failu veidošanas.

  4. Lighted Says:

    Somehow i missed the point. Probably lost in translation :) Anyway … nice blog to visit.

    cheers, Lighted.

  5. Jumis Says:

    Tutoriālis tiešām noderēja! Kas to būtu domājis, ka neattēlo utf-8 simbolus tikai tāpēc, ka nav fonts vajadzīgais norādīts!


Leave a Reply