Теме: PHP

Креирање ПДФ документа у ПХП са tfpdf, fpdf и fpdi

Скраћена веза: http://pedja.supurovic.net/veza/8667

Потребно вам је да на сајту генеришете ПДФ документ који је предефинисани образац а посетилац сајта само треба да га попуни? Ево како сам ја то урадио. Вероватно ће и вама бити корисно.

Поступак се своди на отварање ПДФ документа, учитавање стране из њега која садржи већ припремљен образац и затим уписивање додатног садржаја у ту страну, на местима која су предвиђена за попуњавање.

За креирање ПДФ докумената може се употребити одлична библиотека FPDF. Библиотека садржи ПХП класу која програмеру омогућава креирање ПДФ докумената на високом нивоу, односно, да се не мора бавити структуром и форматом ПДФ документа, већ све обавља позивањем медота ове класе – смешта садржаје на страну документа тамо где жели и како жели. Библиотека је отвореног кода.

Једини недостатак овде библиотеке је што не подржава кодну страну УТФ-8 а тиме ни креирање докумената на нашем језику, ћирилицом и латиницом. Због тога је направљена верзија бибилиотеке TFPDF а која подржава УТФ-8. Мени је требало да креирам документе на нашем језику, па сам употребио сам ову другу библиотеку. Само је преузмите и распакујте архиву у директоријум tfpdf.

Нисам хтео да програмски цртам цео документ већ сам унапред припремио образац у графичком програму и снимо га у ПДФ датотеку.  Употрeбио сам библиотеку FPDI, која је направљена као проширење за FPDF и омогућава учитавање постојећих ПДФ докумената да би се даље могли мењати. Она је такође отвореног кода. Преузмите је и распакујте из архиве у директоријум fpdi.

FPDI класа је направљена да ради са FPDF класом, а ја сам употребио TFPDF, тако да сам морао да направим ситну измену у коду датотеке fpdi/fpdi_bridge.php. На линији 24 оригинално стоји:

    class fpdi_bridge extends FPDF

а ја сам то променио у

    class fpdi_bridge extends tFPDF

подесивши тако да класа ради са TFPDF библиотеком.

Мање-више то је све што је било потребно да се уради да се добије окружење за рад. Сада је још само требало написати код који учитава ПФД документ и уписује у њега додатне податке. Даћу овде кратак пример.

За пoчетак потрeбан је ПДФ документ, спремио сам пример обрасца уплатнице под именом uplatnica.pdf.

Затим сам написао код који попуњава овај образац под именом uplatnica.php:

<?php

// учитај обе библиотеке
require_once ('tfpdf/tfpdf.php');
require_once ('fpdi/fpdi.php');

// инстаницирај објекат и отвори нову празну страну
$pdf = new FPDI();
$pdf->AddPage();

// учитај образац као шаблон стране
$pagecount = $pdf->setSourceFile("uplatnica.pdf");
$tpl = $pdf->importPage(1);

// примени шаблон на празну страну
$mPageInfo = $pdf->useTemplate($tpl);

// подеси референтне координате. СВе остале координате ће 
// бити релативне уодносу на ове тако да ће лако бити подесити
// приказ тачно на образац
$mRootX = 8;
$mRootY = 10;

// подеси врсту слова (DejaVu је део библиотеке, али 
// се може користити и било која друга врста слова)
$pdf->AddFont('DejaVu','','DejaVuSansCondensed.ttf',true); 
$pdf->SetFont('DejaVu','',10); 

// подеси висину једног реда. Тако е касније бити лакше 
// уписивати текст који иде у више редова
$mLineHeight = 5;

// подеси координате прве референтне тачке
$mX1 = $mRootX; $mY1 = $mRootY; 

// намести курсор на координате и упишемо податак
$pdf->SetXY($mX1,$mY1); 
$pdf->Cell(0, 0, "Пера Перић", 0, 0, 'L'); 

$pdf->SetXY($mX1,$mY1+($mLineHeight*1)); 
$pdf->Cell(0, 0, "Перина улица број 4, Перићград", 0, 0, 'L'); 

$mY2 = $mRootY + 20; 

$pdf->SetXY($mX1,$mY2); 
$pdf->Cell(0, 0, "Пера плаћа", 0, 0, 'L'); 

$pdf->SetXY($mX1,$mY2+($mLineHeight*1)); 
$pdf->Cell(0, 0, "све што треба да се плати", 0, 0, 'L'); 

$mY3 = $mRootY + 40; 

$pdf->SetXY($mX1,$mY3); 
$pdf->Cell(0, 0, "Прималац уплате", 0, 0, 'L'); 

$pdf->SetXY($mX1,$mY3+($mLineHeight*1)); 
$pdf->Cell(0, 0, "Прималачка бб, Примиград", 0, 0, 'L'); 

$mX4 = $mRootX + 100; 
$mY4 = $mRootY + 4.5; 

$pdf->SetXY($mX4,$mY4); 
$pdf->Cell(11, 0, "221", 0, 0, 'C'); 

$pdf->SetX($mX4+16); 
$pdf->Cell(11, 0, "РСД", 0, 0, 'C'); 

$pdf->SetX($mX4+39); 
$pdf->Cell(0, 0, "00.000,00", 0, 0, 'L'); 

$mX5 = $mRootX + 120; 
$mY5 = $mRootY + 16.7; 

$pdf->SetXY($mX5,$mY5); 
$pdf->Cell(0, 0, "000-0000000000-00", 0, 0, 'L'); 

$mX6 = $mRootX + 100; 
$mY6 = $mRootY + 28.7; 

$pdf->SetXY($mX6,$mY6); 
$pdf->Cell(11, 0, "99", 0, 0, 'C'); 

$pdf->SetX($mX6+16); 
$pdf->Cell(0, 0, "00000000", 0, 0, 'L'); 

// пошаљи припремљени документ веб читачу да га прикаже
$pdf->Output(); 

?>

Преузмите пример (пхп и пдф): uplatnica.zip (14). Библиотеке преузмите посебно са њихових сајтова и ставите у предвиђене поддиректоријуме.


Поделите овај чланак са пријатељима


Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Попуните израз тако да буде тачан: *