PDF ģenerēšana izmantojot PHP (UTF-8)
2007: 7. Oktobris
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:
- TCPDF – http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf
- Barcode klase – http://www.mribti.com/barcode/download.php
- GD bibliotēka – http://www.libgd.org/FAQ_PHP#How_do_I_get_gd_to_work_with_PHP.3F
Darbības:
- TCPDF atarhivē uz servera
- Sakonfigurē TCPDF – failā tcpdf/config/tcpdf_config.php jānomaina 2 vērtības: pilnais ceļš līdz tcpdf direktorijai + adrese
- Barcode klasi atarhivē tcpdf direktorijā tcpdf/barcode/
- 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);

2007: 7. Oktobris at 7:15 pēcpusdienā
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/
2007: 7. Oktobris at 10:32 pēcpusdienā
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.
2007: 10. Oktobris at 10:14 priekšpusdienā
Paldies par rakstu.
Tieši šobrīd ir vajadzība pēc latvisku pdf failu veidošanas.
2008: 19. Jūnijs at 6:58 priekšpusdienā
Somehow i missed the point. Probably lost in translation
Anyway … nice blog to visit.
cheers, Lighted.
2008: 18. Decembris at 5:55 pēcpusdienā
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!