Težave z šumniki
 
klopar 3. jan 2013 21:44:10 Pridružen od:
17. feb 2012
446 objav
78 113 24
#1

Pozdravljeni,



prosil bi vas, če mi lahko kdo razloži, kako bi rešil situacijo. Imam kodo, v kateri bi rad dodal šumnike č, Č, Ž, ž, Š in š: vendar ne vem kako bi se lotil tega oziroma kaj moram dodati. Že v naprej se zavaljujem in lep pozdrav



<?php

$type = 'Core';

$name = 'Helvetica';

$up = -100;

$ut = 50;

$cw = array(

chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,

chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,

','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,

'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,

'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,

'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,

chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,

chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,

chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,

chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,

chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,

chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);

?>


všeč(0) ni všeč(0) spam(0)
 
kelvan 3. jan 2013 23:24:39 Pridružen od:
19. okt 2007
891 objav
658 122 26
#2

ehm... ne razumem čisto, kaj naj bi ta koda delala (razen replajsanja znakov) oziroma v sklopu česa jo imaš namen uporabiti...


všeč(0) ni všeč(0) spam(0)
 
metallon 4. jan 2013 10:28:44 Pridružen od:
28. apr 2012
362 objav
326 70 8
#3

Jaz tudi ne razumem zadevo... a bi jo lahko bolje objasnil ?


všeč(0) ni všeč(0) spam(0)
 
Imperator 4. jan 2013 14:45:50 Pridružen od:
30. mar 2009
97 objav
125 44 23
#4

Predvidevam, da bo tole rešilo situacijo:



Notepad++ -> Encoding -> Convert to UTF-8 -> Pišeš čšž-je kakor hočeš in pravilno se prikazujejo na spletni strani, kakor tudi v urejevalniku.



Potrebno je biti pa pozoren, da so vsi fajli tako zakodirani, drugače ti lahko na spletni strani razmeče določene div-e.


všeč(1) ni všeč(0) spam(0)
 
klopar 4. jan 2013 21:58:57 Pridružen od:
17. feb 2012
446 objav
78 113 24
#5

Pozdravljeni, hvala za odgovore. Bom raje prikazal na primeru. Gre za tiskanje kuvert določene dolžine in bi rad naredil tako, da ko se izpolne obrazec, da se prikaže v pdf datoteki. Moj primer se nahaja tukaj:



http://kuverta.slo-podnapisi.net/



Hvala


všeč(0) ni všeč(0) spam(0)
 
gnome 5. jan 2013 01:04:14 Pridružen od:
27. apr 2010
829 objav
412 47 10
#6

Naredi to, kar ti je predlagal Imperator. Če pa ti ne bo delovalo pa skonvertaj v UTF-8 brez BOM. Najverjetneje je težava res ravno v tem.


všeč(0) ni všeč(0) spam(0)
Adobe Commerce/Magento 2 & Laravel + {VueJS/React} razvijalec | Moj #1 resource za Laravel & PHP | Claude Code alternative 10% OFF
 
klopar 6. jan 2013 22:03:42 Pridružen od:
17. feb 2012
446 objav
78 113 24
#7

Hvala bom ponovno poskusil in javim :) hvala


všeč(0) ni všeč(0) spam(0)
 
klopar 7. jan 2013 17:00:44 Pridružen od:
17. feb 2012
446 objav
78 113 24
#8

Delno deluje. Samo še črko č bi moral popraviti in bi bilo supr.Izpiše pa se mi: č. Mogoče kdo ve kako bi lahko to naredil?



Hvala


všeč(0) ni všeč(0) spam(0)
 
metallon 7. jan 2013 19:40:46 Pridružen od:
28. apr 2012
362 objav
326 70 8
#9

Vem, da je long shoot ampak vseeno..

Imaš html nastavljen na utf-8?

<meta content="text/html; charset=utf-8" http-equiv="Content-Type">


všeč(1) ni všeč(0) spam(0)
 
klopar 7. jan 2013 20:13:35 Pridružen od:
17. feb 2012
446 objav
78 113 24
#10

Imam nastavlejn vendar mi sedaj namesto črke č izpisuje è. bom kar kodo poslal, saj ne vem več kaj naj naredim:



Index.php:

<?php



define('FPDF_FONTPATH','font/');//simpleinvoice change.

require('fpdf.php');//simpleinvoice change.



header('Content-Type: text/html; charset=utf-8');

class PDF_POSTNET extends FPDF



{



// PUBLIC PROCEDURES



// draws a bar code for the given zip code using pdf lines



// triggers error if zip code is invalid



// x,y specifies the lower left corner of the bar code



function POSTNETBarCode($x, $y, $zipcode)



{



// Save nomical bar dimensions in user units



// Full Bar Nominal Height = 0.125"



$FullBarHeight = 9 / $this->k;



// Half Bar Nominal Height = 0.050"



$HalfBarHeight = 3.6 / $this->k;



// Full and Half Bar Nominal Width = 0.020"



$BarWidth = 1.44 / $this->k;



// Bar Spacing = 0.050"



$BarSpacing = 3.6 / $this->k;



$FiveBarSpacing = $BarSpacing * 5;



// 1 represents full-height bars and 0 represents half-height bars



$BarDefinitionsArray = Array(



1 => Array(0,0,0,1,1),



2 => Array(0,0,1,0,1),



3 => Array(0,0,1,1,0),



4 => Array(0,1,0,0,1),



5 => Array(0,1,0,1,0),



6 => Array(0,1,1,0,0),



7 => Array(1,0,0,0,1),



8 => Array(1,0,0,1,0),



9 => Array(1,0,1,0,0),



0 => Array(1,1,0,0,0));



// validate the zip code



$this->_ValidateZipCode($zipcode);



// set the line width



$this->SetLineWidth($BarWidth);



// draw start frame bar



$this->Line($x, $y, $x, $y - $FullBarHeight);



$x += $BarSpacing;



// draw digit bars



for($i = 0; $i < 5; $i++)



{



$this->_DrawDigitBars($x, $y, $BarSpacing, $HalfBarHeight,



$FullBarHeight, $BarDefinitionsArray, $zipcode{$i});



$x += $FiveBarSpacing;



}



// draw more digit bars if 10 digit zip code



if(strlen($zipcode) == 10)



{



for($i = 6; $i < 10; $i++)



{



$this->_DrawDigitBars($x, $y, $BarSpacing, $HalfBarHeight,



$FullBarHeight, $BarDefinitionsArray, $zipcode{$i});



$x += $FiveBarSpacing;



}



}



// draw check sum digit



$this->_DrawDigitBars($x, $y, $BarSpacing, $HalfBarHeight,



$FullBarHeight, $BarDefinitionsArray,



$this->_CalculateCheckSumDigit($zipcode));



$x += $FiveBarSpacing;



// draw end frame bar



$this->Line($x, $y, $x, $y - $FullBarHeight);



}



// Reads from end of string and returns first matching valid



// zip code of form DDDDD or DDDDD-DDDD, in that order.



// Returns empty string if no zip code found.



function ParseZipCode($stringToParse)



{



// check if string is an array or object



if(isarray($stringToParse) || isobject($stringToParse))



{



return "";



}



// convert parameter to a string



$stringToParse = strval($stringToParse);



$lengthOfString = strlen($stringToParse);



if ( $lengthOfString < 5 ) {



return "";



}



// parse the zip code backward



$zipcodeLength = 0;



$zipcode = "";



for ($i = $lengthOfString-1; $i >= 0; $i--)



{



// conditions to continue the zip code



switch($zipcodeLength)



{



case 0:



case 1:



case 2:



case 3:



if ( is_numeric($stringToParse{$i}) ) {



$zipcodeLength += 1;



$zipcode .= $stringToParse{$i};



} else {



$zipcodeLength = 0;



$zipcode = "";



}



break;



case 4:



if ( $stringToParse{$i} == "-" ) {



$zipcodeLength += 1;



$zipcode .= $stringToParse{$i};



} elseif ( is_numeric($stringToParse{$i}) ) {



$zipcodeLength += 1;



$zipcode .= $stringToParse{$i};



break 2;



} else {



$zipcodeLength = 0;



$zipcode = "";



}



break;



case 5:



case 6:



case 7:



case 8:



if ( is_numeric($stringToParse{$i}) ) {



$zipcodeLength = $zipcodeLength + 1;



$zipcode = $zipcode . $stringToParse{$i};



} else {



$zipcodeLength = 0;



$zipcode = "";



}



break;



case 9:



if ( is_numeric($stringToParse{$i}) ) {



$zipcodeLength = $zipcodeLength + 1;



$zipcode = $zipcode . $stringToParse{$i};



break;



} else {



$zipcodeLength = 0;



$zipcode = "";



}



break;



}



}



// return the parsed zip code if found



if ( $zipcodeLength == 5 || $zipcodeLength == 10 ) {



// reverse the zip code



return strrev($zipcode);



} else {



return "";



}



}



// PRIVATE PROCEDURES



// triggers user error if the zip code is invalid



// valid zip codes are of the form DDDDD or DDDDD-DDDD



// where D is a digit from 0 to 9, returns the validated zip code



function _ValidateZipCode($zipcode)



{



$functionname = "ValidateZipCode Error: ";



// check if zipcode is an array or object



if(isarray($zipcode) || isobject($zipcode))



{



trigger_error($functionname.



"Zip code may not be an array or object.", EUSERERROR);



}



// convert zip code to a string



$zipcode = strval($zipcode);



// check if length is 5



if ( strlen($zipcode) != 5 && strlen($zipcode) != 10 ) {



trigger_error($functionname.



"Zip code must be 5 digits or 10 digits including hyphen. len:".



strlen($zipcode)." zipcode: ".$zipcode, EUSERERROR);



}



if ( strlen($zipcode) == 5 ) {



// check that all characters are numeric



for ( $i = 0; $i < 5; $i++ ) {



if ( is_numeric( $zipcode{$i} ) == false ) {



trigger_error($functionname.



"5 digit zip code contains non-numeric character.",



EUSERERROR);



}



}



} else {



// check for hyphen



if ( $zipcode{5} != "-" ) {



trigger_error($functionname.



"10 digit zip code does not contain hyphen in right place.",



EUSERERROR);



}



// check that all characters are numeric



for ( $i = 0; $i < 10; $i++ ) {



if ( is_numeric($zipcode{$i}) == false && $i != 5 ) {



trigger_error($functionname.



"10 digit zip code contains non-numeric character.",



EUSERERROR);



}



}



}



// return the string



return $zipcode;



}



// takes a validated zip code and



// calculates the checksum for POSTNET



function _CalculateCheckSumDigit($zipcode)



{



// calculate sum of digits



if( strlen($zipcode) == 10 ) {



$sumOfDigits = $zipcode{0} + $zipcode{1} +



$zipcode{2} + $zipcode{3} + $zipcode{4} +



$zipcode{6} + $zipcode{7} + $zipcode{8} +



$zipcode{9};



} else {



$sumOfDigits = $zipcode{0} + $zipcode{1} +



$zipcode{2} + $zipcode{3} + $zipcode{4};



}



// return checksum digit



if( ($sumOfDigits % 10) == 0 )



return 0;



else



return 10 - ($sumOfDigits % 10);



}



// Takes a digit and draws the corresponding POSTNET bars.



function _DrawDigitBars($x, $y, $BarSpacing, $HalfBarHeight,



$FullBarHeight, $BarDefinitionsArray, $digit)



{



// check for invalid digit



if($digit < 0 && $digit > 9)



triggererror("DrawDigitBars: invalid digit.", EUSER_ERROR);



// Draw the five bars representing a digit.



for($i = 0; $i < 5; $i++)



{



if($BarDefinitionsArray[$digit][$i] == 1)



$this->Line($x, $y, $x, $y - $FullBarHeight);



else



$this->Line($x, $y, $x, $y - $HalfBarHeight);



$x += $BarSpacing;



}



}



}



// Get request variables into global variables



$selectRequestVariables = array("command","returnline1","returnline2",



"returnline3","returnline4","recipientline1","recipientline2",



"recipientline3","recipientline4");



foreach($selectRequestVariables as $selectRequestVar) {



// split across lines for readability



eval('$GLOBALS["'.$selectRequestVar.'"] = $'.



$selectRequestVar.' = isset($_REQUEST["'.



$selectRequestVar.'"]) ? $_REQUEST["'.



$selectRequestVar.'"] : "";');



}



// If the command is 'createenvelope', generate the envelope



if($command == "createenvelope")



{



// Set up the PDF object



$pdf = new PDF_POSTNET("P","pt",array(684,500)); //Nastavitev kuverte



$pdf->Open();



$pdf->AddPage();



$pdf->SetFont('Times','',11);



// Print return address



$pdf->Text(54,54,iconv("UTF-8", "cp1250",$returnline1));



$pdf->Text(54,68,iconv("UTF-8", "WINDOWS-1250",$returnline2));



$pdf->Text(54,82,iconv("UTF-8", "WINDOWS-1250",$returnline3));



$pdf->Text(54,96,iconv("UTF-8", "WINDOWS-1250",$returnline4));



// Get last non-empty line of recipient address



if($recipientline4 != "") {



$stringToParse = $recipientline4;



}



elseif($recipientline3 != "") {



$stringToParse = $recipientline3;



}



else {



$stringToParse = $recipientline2;



}



// Extract zip code from last non-empty line of recipient



$zipcode = $pdf->ParseZipCode($stringToParse);



// If zip code is found, print the POSTNET bar code



if($zipcode != "") {



$pdf->POSTNETBarCode(288,170,$zipcode);



}



// Print recipient address



$pdf->Text(288,184,iconv("UTF-8", "WINDOWS-1250",$recipientline1));



$pdf->Text(288,198,iconv("UTF-8", "WINDOWS-1250",$recipientline2));



$pdf->Text(288,212,iconv("UTF-8", "WINDOWS-1250",$recipientline3));



$pdf->Text(288,226,iconv("UTF-8", "WINDOWS-1250",$recipientline4));



// Output the PDF



header('Content-type: application/pdf; charset="utf-8"',true);



$pdf->Output();



exit();



}



?>

<html>

<head>

<style type="text/css">



table.letter {



border: 1px outset black;



width: 400px;



height: 350px;



padding: 0px;



margin: 0px;



}



td.address {



text-align:left;



margin: 0px;



height: 14pt;



}



td.address1 {



padding-left: 280px;



margin: 0px;



height: 14pt;



}



input.address {



padding: 0px;



height: 14pt;



width: 212pt;



border: 1px inset #999999;



font-family: "Times",serif;



font-size: 11pt;



}



td.topmargin {



padding: 0px;



margin: 0px;



height: 30px;



}



td.separator {



padding: 0px;



margin: 0px;



height: 30px;



}



</style>



<meta http-equiv="Content-Type" content="text/html; charset=utf-8">



<script type="text/javascript">



function clearform()



{



for(var i = 0; i < 8; i++)



document.forms['letterform'].elements*.value = "";



}



function initpage() {



document.forms['letterform'].elements[0].focus();



}



</script></head>



<body>



<form method="post" action="index.php" name="letterform">

<tr>

<td class="address">



<table class="letter" width="570" height="354">



<tr >



<td class="topmargin" style="height: 30px">

<p align="right"> </td>



<td class="address" style="height: 21px" rowspan="5">



<p align="center">

<img border="0" src="znamka_slovenije.jpg" width="63" height="93"></td>



</tr>

<tr>



<td class="address" style="height: 21px">



<p style="text-align: left">



<input class="address" type="text" name="returnline1" value="Ime pošljatelja" onfocus="if (value =='Ime pošljatelja') {value =''}" onblur="if (value == '') {value = 'Ime pošljatelja'}">



</td>



</tr>

<tr>



<td class="address" style="height: 21px">



<p style="text-align: left">



<input class="address" type="text" name="returnline2" value="Naslov pošiljatelja" onfocus="if (value =='Naslov pošiljatelja') {value =''}" onblur="if (value == '') {value = 'Naslov pošiljatelja'}">



</td>



</tr>

<tr>



<td class="address" style="height: 21px">



<p style="text-align: left">



<input class="address" type="text" name="returnline3" value="Poštna številka pošljatelja" onfocus="if (value =='Poštna številka pošljatelja') {value =''}" onblur="if (value == '') {value = 'Poštna številka pošljatelja'}">



</td>



</tr>

<tr>



<td class="address" style="height: 21px">



 </td>



</tr>

<tr>



<td class="separator" style="height: 30px" colspan="2"></td>



</tr>

<tr>



<td class="separator" style="height: 57px" colspan="2"> <p> </td>



</tr>

<tr>



<td class="address1" style="height: 21px" colspan="2">



 </td>



</tr>

<tr>



<td class="address1" style="height: 21px" colspan="2">



<input class="address" type="text" name="recipientline2" value="Ime naslovnika" onfocus="if (value =='Ime naslovnika') {value =''}" onblur="if (value == '') {value = 'Ime naslovnika'}">



</td>



</tr>

<tr>



<td class="address1" style="height: 21px" colspan="2">



<input class="address" type="text" name="recipientline3" value="Naslov naslovnika" onfocus="if (value =='Naslov naslovnika') {value =''}" onblur="if (value == '') {value = 'Naslov naslovnika'}">



</td>



</tr>

<tr>



<td class="address1" style="height: 21px" colspan="2">



<input class="address" type="text" name="recipientline4" value="Poštna številka naslovnika" onfocus="if (value =='Poštna številka naslovnika') {value =''}" onblur="if (value == '') {value = 'Poštna številka naslovnika'}">



</td>



</tr>

<tr>



<td class="filler" colspan="2" height="37"></td>



</tr>

<tr>

<td width="387"></td>

<td height="2" width="171"></td>

</tr>



</table>



 <p>



<input type="submit" value="Natisni kuverto" name="submitbutton">



<input type="reset" value="Resetiraj">



<input type="hidden" name="command" value="createenvelope">



<b>Velikost kuverte je: </b>175 mm x 125 mm</p>



</form>

</html>

<?php



print_footer();



?>



in fpdf.php



<?php

/*******************************************************************************

* FPDF *

* *

* Version: 1.7 *

* Date: 2011-06-18 *

* Author: Olivier PLATHEY *

*******************************************************************************/



define('FPDF_VERSION','1.7');



class FPDF

{

var $page; // current page number

var $n; // current object number

var $offsets; // array of object offsets

var $buffer; // buffer holding in-memory PDF

var $pages; // array containing pages

var $state; // current document state

var $compress; // compression flag

var $k; // scale factor (number of points in user unit)

var $DefOrientation; // default orientation

var $CurOrientation; // current orientation

var $StdPageSizes; // standard page sizes

var $DefPageSize; // default page size

var $CurPageSize; // current page size

var $PageSizes; // used for pages with non default sizes or orientations

var $wPt, $hPt; // dimensions of current page in points

var $w, $h; // dimensions of current page in user unit

var $lMargin; // left margin

var $tMargin; // top margin

var $rMargin; // right margin

var $bMargin; // page break margin

var $cMargin; // cell margin

var $x, $y; // current position in user unit

var $lasth; // height of last printed cell

var $LineWidth; // line width in user unit

var $fontpath; // path containing fonts

var $CoreFonts; // array of core font names

var $fonts; // array of used fonts

var $FontFiles; // array of font files

var $diffs; // array of encoding differences

var $FontFamily; // current font family

var $FontStyle; // current font style

var $underline; // underlining flag

var $CurrentFont; // current font info

var $FontSizePt; // current font size in points

var $FontSize; // current font size in user unit

var $DrawColor; // commands for drawing color

var $FillColor; // commands for filling color

var $TextColor; // commands for text color

var $ColorFlag; // indicates whether fill and text colors are different

var $ws; // word spacing

var $images; // array of used images

var $PageLinks; // array of links in pages

var $links; // array of internal links

var $AutoPageBreak; // automatic page breaking

var $PageBreakTrigger; // threshold used to trigger page breaks

var $InHeader; // flag set when processing header

var $InFooter; // flag set when processing footer

var $ZoomMode; // zoom display mode

var $LayoutMode; // layout display mode

var $title; // title

var $subject; // subject

var $author; // author

var $keywords; // keywords

var $creator; // creator

var $AliasNbPages; // alias for total number of pages

var $PDFVersion; // PDF version number



/*******************************************************************************

* *

* Public methods *

* *

******************************************************************************/

function FPDF($orientation='P', $unit='mm', $size='A4')

{

// Some checks

$this->dochecks();

// Initialization of properties

$this->page = 0;

$this->n = 2;

$this->buffer = '';

$this->pages = array();

$this->PageSizes = array();

$this->state = 0;

$this->fonts = array();

$this->FontFiles = array();

$this->diffs = array();

$this->images = array();

$this->links = array();

$this->InHeader = false;

$this->InFooter = false;

$this->lasth = 0;

$this->FontFamily = '';

$this->FontStyle = '';

$this->FontSizePt = 12;

$this->underline = false;

$this->DrawColor = '0 G';

$this->FillColor = '0 g';

$this->TextColor = '0 g';

$this->ColorFlag = false;

$this->ws = 0;

// Font path

if(defined('FPDF
FONTPATH'))

{

$this->fontpath = FPDFFONTPATH;

if(substr($this->fontpath,-1)!='/' && substr($this->fontpath,-1)!='\')

$this->fontpath .= '/';

}

elseif(is
dir(dirname(FILE).'/font'))

$this->fontpath = dirname(FILE).'/font/';

else

$this->fontpath = '';

// Core fonts

$this->CoreFonts = array('courier', 'helvetica', 'times', 'symbol', 'zapfdingbats');

// Scale factor

if($unit=='pt')

$this->k = 1;

elseif($unit=='mm')

$this->k = 72/25.4;

elseif($unit=='cm')

$this->k = 72/2.54;

elseif($unit=='in')

$this->k = 72;

else

$this->Error('Incorrect unit: '.$unit);

// Page sizes

$this->StdPageSizes = array('a3'=>array(841.89,1190.55), 'a4'=>array(595.28,841.89), 'a5'=>array(420.94,595.28),

'letter'=>array(612,792), 'legal'=>array(612,1008));

$size = $this->_getpagesize($size);

$this->DefPageSize = $size;

$this->CurPageSize = $size;

// Page orientation

$orientation = strtolower($orientation);

if($orientation=='p' || $orientation=='portrait')

{

$this->DefOrientation = 'P';

$this->w = $size[0];

$this->h = $size[1];

}

elseif($orientation=='l' || $orientation=='landscape')

{

$this->DefOrientation = 'L';

$this->w = $size[1];

$this->h = $size[0];

}

else

$this->Error('Incorrect orientation: '.$orientation);

$this->CurOrientation = $this->DefOrientation;

$this->wPt = $this->w
$this->k;

$this->hPt = $this->h$this->k;

// Page margins (1 cm)

$margin = 28.35/$this->k;

$this->SetMargins($margin,$margin);

// Interior cell margin (1 mm)

$this->cMargin = $margin/10;

// Line width (0.2 mm)

$this->LineWidth = .567/$this->k;

// Automatic page break

$this->SetAutoPageBreak(true,2
$margin);

// Default display mode

$this->SetDisplayMode('default');

// Enable compression

$this->SetCompression(true);

// Set default PDF version number

$this->PDFVersion = '1.3';

}



function SetMargins($left, $top, $right=null)

{

// Set left, top and right margins

$this->lMargin = $left;

$this->tMargin = $top;

if($right===null)

$right = $left;

$this->rMargin = $right;

}



function SetLeftMargin($margin)

{

// Set left margin

$this->lMargin = $margin;

if($this->page>0 && $this->x<$margin)

$this->x = $margin;

}



function SetTopMargin($margin)

{

// Set top margin

$this->tMargin = $margin;

}



function SetRightMargin($margin)

{

// Set right margin

$this->rMargin = $margin;

}



function SetAutoPageBreak($auto, $margin=0)

{

// Set auto page break mode and triggering margin

$this->AutoPageBreak = $auto;

$this->bMargin = $margin;

$this->PageBreakTrigger = $this->h-$margin;

}



function SetDisplayMode($zoom, $layout='default')

{

// Set display mode in viewer

if($zoom=='fullpage' || $zoom=='fullwidth' || $zoom=='real' || $zoom=='default' || !is_string($zoom))

$this->ZoomMode = $zoom;

else

$this->Error('Incorrect zoom display mode: '.$zoom);

if($layout=='single' || $layout=='continuous' || $layout=='two' || $layout=='default')

$this->LayoutMode = $layout;

else

$this->Error('Incorrect layout display mode: '.$layout);

}



function SetCompression($compress)

{

// Set page compression

if(function_exists('gzcompress'))

$this->compress = $compress;

else

$this->compress = false;

}



function SetTitle($title, $isUTF8=false)

{

// Title of document

if($isUTF8)

$title = $this->_UTF8toUTF16($title);

$this->title = $title;

}



function SetSubject($subject, $isUTF8=false)

{

// Subject of document

if($isUTF8)

$subject = $this->_UTF8toUTF16($subject);

$this->subject = $subject;

}



function SetAuthor($author, $isUTF8=false)

{

// Author of document

if($isUTF8)

$author = $this->_UTF8toUTF16($author);

$this->author = $author;

}



function SetKeywords($keywords, $isUTF8=false)

{

// Keywords of document

if($isUTF8)

$keywords = $this->_UTF8toUTF16($keywords);

$this->keywords = $keywords;

}



function SetCreator($creator, $isUTF8=false)

{

// Creator of document

if($isUTF8)

$creator = $this->_UTF8toUTF16($creator);

$this->creator = $creator;

}



function AliasNbPages($alias='{nb}')

{

// Define an alias for total number of pages

$this->AliasNbPages = $alias;

}



function Error($msg)

{

// Fatal error

die('<b>FPDF error:</b> '.$msg);

}



function Open()

{

// Begin document

$this->state = 1;

}



function Close()

{

// Terminate document

if($this->state==3)

return;

if($this->page==0)

$this->AddPage();

// Page footer

$this->InFooter = true;

$this->Footer();

$this->InFooter = false;

// Close page

$this->endpage();

// Close document

$this->
enddoc();

}



function AddPage($orientation='', $size='')

{

// Start a new page

if($this->state==0)

$this->Open();

$family = $this->FontFamily;

$style = $this->FontStyle.($this->underline ? 'U' : '');

$fontsize = $this->FontSizePt;

$lw = $this->LineWidth;

$dc = $this->DrawColor;

$fc = $this->FillColor;

$tc = $this->TextColor;

$cf = $this->ColorFlag;

if($this->page>0)

{

// Page footer

$this->InFooter = true;

$this->Footer();

$this->InFooter = false;

// Close page

$this->endpage();

}

// Start new page

$this->
beginpage($orientation,$size);

// Set line cap style to square

$this->out('2 J');

// Set line width

$this->LineWidth = $lw;

$this->
out(sprintf('%.2F w',$lw$this->k));

// Set font

if($family)

$this->SetFont($family,$style,$fontsize);

// Set colors

$this->DrawColor = $dc;

if($dc!='0 G')

$this->out($dc);

$this->FillColor = $fc;

if($fc!='0 g')

$this->
out($fc);

$this->TextColor = $tc;

$this->ColorFlag = $cf;

// Page header

$this->InHeader = true;

$this->Header();

$this->InHeader = false;

// Restore line width

if($this->LineWidth!=$lw)

{

$this->LineWidth = $lw;

$this->_out(sprintf('%.2F w',$lw
$this->k));

}

// Restore font

if($family)

$this->SetFont($family,$style,$fontsize);

// Restore colors

if($this->DrawColor!=$dc)

{

$this->DrawColor = $dc;

$this->out($dc);

}

if($this->FillColor!=$fc)

{

$this->FillColor = $fc;

$this->
out($fc);

}

$this->TextColor = $tc;

$this->ColorFlag = $cf;

}



function Header()

{

// To be implemented in your own inherited class

}



function Footer()

{

// To be implemented in your own inherited class

}



function PageNo()

{

// Get current page number

return $this->page;

}



function SetDrawColor($r, $g=null, $b=null)

{

// Set color for all stroking operations

if(($r==0 && $g==0 && $b==0) || $g===null)

$this->DrawColor = sprintf('%.3F G',$r/255);

else

$this->DrawColor = sprintf('%.3F %.3F %.3F RG',$r/255,$g/255,$b/255);

if($this->page>0)

$this->_out($this->DrawColor);

}



function SetFillColor($r, $g=null, $b=null)

{

// Set color for all filling operations

if(($r==0 && $g==0 && $b==0) || $g===null)

$this->FillColor = sprintf('%.3F g',$r/255);

else

$this->FillColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255);

$this->ColorFlag = ($this->FillColor!=$this->TextColor);

if($this->page>0)

$this->_out($this->FillColor);

}



function SetTextColor($r, $g=null, $b=null)

{

// Set color for text

if(($r==0 && $g==0 && $b==0) || $g===null)

$this->TextColor = sprintf('%.3F g',$r/255);

else

$this->TextColor = sprintf('%.3F %.3F %.3F rg',$r/255,$g/255,$b/255);

$this->ColorFlag = ($this->FillColor!=$this->TextColor);

}



function GetStringWidth($s)

{

// Get width of a string in the current font

$s = (string)$s;

$cw = &$this->CurrentFont['cw'];

$w = 0;

$l = strlen($s);

for($i=0;$i<$l;$i++)

$w += $cw[$s[$i]];

return $w*$this->FontSize/1000;

}



function SetLineWidth($width)

{

// Set line width

$this->LineWidth = $width;

if($this->page>0)

$this->_out(sprintf('%.2F w',$width*$this->k));

}



function Line($x1, $y1, $x2, $y2)

{

// Draw a line

$this->_out(sprintf('%.2F %.2F m %.2F %.2F l S',$x1$this->k,($this->h-$y1)$this->k,$x2$this->k,($this->h-$y2)$this->k));

}



function Rect($x, $y, $w, $h, $style='')

{

// Draw a rectangle

if($style=='F')

$op = 'f';

elseif($style=='FD' || $style=='DF')

$op = 'B';

else

$op = 'S';

$this->_out(sprintf('%.2F %.2F %.2F %.2F re %s',$x$this->k,($this->h-$y)$this->k,$w$this->k,-$h$this->k,$op));

}



function AddFont($family, $style='', $file='')

{

// Add a TrueType, OpenType or Type1 font

$family = strtolower($family);

if($file=='')

$file = strreplace(' ','',$family).strtolower($style).'.php';

$style = strtoupper($style);

if($style=='IB')

$style = 'BI';

$fontkey = $family.$style;

if(isset($this->fonts[$fontkey]))

return;

$info = $this->
loadfont($file);

$info['i'] = count($this->fonts)+1;

if(!empty($info['diff']))

{

// Search existing encodings

$n = array_search($info['diff'],$this->diffs);

if(!$n)

{

$n = count($this->diffs)+1;

$this->diffs[$n] = $info['diff'];

}

$info['diffn'] = $n;

}

if(!empty($info['file']))

{

// Embedded font

if($info['type']=='TrueType')

$this->FontFiles[$info['file']] = array('length1'=>$info['originalsize']);

else

$this->FontFiles[$info['file']] = array('length1'=>$info['size1'], 'length2'=>$info['size2']);

}

$this->fonts[$fontkey] = $info;

}



function SetFont($family, $style='', $size=0)

{

// Select a font; size given in points

if($family=='')

$family = $this->FontFamily;

else

$family = strtolower($family);

$style = strtoupper($style);

if(strpos($style,'U')!==false)

{

$this->underline = true;

$style = strreplace('U','',$style);

}

else

$this->underline = false;

if($style=='IB')

$style = 'BI';

if($size==0)

$size = $this->FontSizePt;

// Test if font is already selected

if($this->FontFamily==$family && $this->FontStyle==$style && $this->FontSizePt==$size)

return;

// Test if font is already loaded

$fontkey = $family.$style;

if(!isset($this->fonts[$fontkey]))

{

// Test if one of the core fonts

if($family=='arial')

$family = 'helvetica';

if(in
array($family,$this->CoreFonts))

{

if($family=='symbol' || $family=='zapfdingbats')

$style = '';

$fontkey = $family.$style;

if(!isset($this->fonts[$fontkey]))

$this->AddFont($family,$style);

}

else

$this->Error('Undefined font: '.$family.' '.$style);

}

// Select it

$this->FontFamily = $family;

$this->FontStyle = $style;

$this->FontSizePt = $size;

$this->FontSize = $size/$this->k;

$this->CurrentFont = &$this->fonts[$fontkey];

if($this->page>0)

$this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt));

}



function SetFontSize($size)

{

// Set font size in points

if($this->FontSizePt==$size)

return;

$this->FontSizePt = $size;

$this->FontSize = $size/$this->k;

if($this->page>0)

$this->_out(sprintf('BT /F%d %.2F Tf ET',$this->CurrentFont['i'],$this->FontSizePt));

}



function AddLink()

{

// Create a new internal link

$n = count($this->links)+1;

$this->links[$n] = array(0, 0);

return $n;

}



function SetLink($link, $y=0, $page=-1)

{

// Set destination of internal link

if($y==-1)

$y = $this->y;

if($page==-1)

$page = $this->page;

$this->links[$link] = array($page, $y);

}



function Link($x, $y, $w, $h, $link)

{

// Put a link on the page

$this->PageLinks[$this->page][] = array($x$this->k, $this->hPt-$y$this->k, $w$this->k, $h$this->k, $link);

}



function Text($x, $y, $txt)

{

// Output a string

$s = sprintf('BT %.2F %.2F Td (%s) Tj ET',$x$this->k,($this->h-$y)$this->k,$this->escape($txt));

if($this->underline && $txt!='')

$s .= ' '.$this->
dounderline($x,$y,$txt);

if($this->ColorFlag)

$s = 'q '.$this->TextColor.' '.$s.' Q';

$this->_out($s);

}



function AcceptPageBreak()

{

// Accept automatic page break or not

return $this->AutoPageBreak;

}



function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='')

{

// Output a cell

$k = $this->k;

if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())

{

// Automatic page break

$x = $this->x;

$ws = $this->ws;

if($ws>0)

{

$this->ws = 0;

$this->out('0 Tw');

}

$this->AddPage($this->CurOrientation,$this->CurPageSize);

$this->x = $x;

if($ws>0)

{

$this->ws = $ws;

$this->
out(sprintf('%.3F Tw',$ws$k));

}

}

if($w==0)

$w = $this->w-$this->rMargin-$this->x;

$s = '';

if($fill || $border==1)

{

if($fill)

$op = ($border==1) ? 'B' : 'f';

else

$op = 'S';

$s = sprintf('%.2F %.2F %.2F %.2F re %s ',$this->x
$k,($this->h-$this->y)$k,$w$k,-$h$k,$op);

}

if(is_string($border))

{

$x = $this->x;

$y = $this->y;

if(strpos($border,'L')!==false)

$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x
$k,($this->h-$y)$k,$x$k,($this->h-($y+$h))$k);

if(strpos($border,'T')!==false)

$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x
$k,($this->h-$y)$k,($x+$w)$k,($this->h-$y)$k);

if(strpos($border,'R')!==false)

$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',($x+$w)
$k,($this->h-$y)$k,($x+$w)$k,($this->h-($y+$h))$k);

if(strpos($border,'B')!==false)

$s .= sprintf('%.2F %.2F m %.2F %.2F l S ',$x
$k,($this->h-($y+$h))$k,($x+$w)$k,($this->h-($y+$h))$k);

}

if($txt!=='')

{

if($align=='R')

$dx = $w-$this->cMargin-$this->GetStringWidth($txt);

elseif($align=='C')

$dx = ($w-$this->GetStringWidth($txt))/2;

else

$dx = $this->cMargin;

if($this->ColorFlag)

$s .= 'q '.$this->TextColor.' ';

$txt2 = strreplace(')','\)',strreplace('(','\(',str_replace('\','\\',$txt)));

$s .= sprintf('BT %.2F %.2F Td (%s) Tj ET',($this->x+$dx)
$k,($this->h-($this->y+.5$h+.3$this->FontSize))$k,$txt2);

if($this->underline)

$s .= ' '.$this->_dounderline($this->x+$dx,$this->y+.5
$h+.3$this->FontSize,$txt);

if($this->ColorFlag)

$s .= ' Q';

if($link)

$this->Link($this->x+$dx,$this->y+.5
$h-.5*$this->FontSize,$this->GetStringWidth($txt),$this->FontSize,$link);

}

if($s)

$this->_out($s);

$this->lasth = $h;

if($ln>0)

{

// Go to next line

$this->y += $h;

if($ln==1)

$this->x = $this->lMargin;

}

else

$this->x += $w;

}



function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false)

{

// Output text with automatic or explicit line breaks

$cw = &$this->CurrentFont['cw'];

if($w==0)

$w = $this->w-$this->rMargin-$this->x;

$wmax = ($w-2$this->cMargin)1000/$this->FontSize;

$s = strreplace("\r",'',$txt);

$nb = strlen($s);

if($nb>0 && $s[$nb-1]=="\n")

$nb--;

$b = 0;

if($border)

{

if($border==1)

{

$border = 'LTRB';

$b = 'LRT';

$b2 = 'LR';

}

else

{

$b2 = '';

if(strpos($border,'L')!==false)

$b2 .= 'L';

if(strpos($border,'R')!==false)

$b2 .= 'R';

$b = (strpos($border,'T')!==false) ? $b2.'T' : $b2;

}

}

$sep = -1;

$i = 0;

$j = 0;

$l = 0;

$ns = 0;

$nl = 1;

while($i<$nb)

{

// Get next character

$c = $s[$i];

if($c=="\n")

{

// Explicit line break

if($this->ws>0)

{

$this->ws = 0;

$this->
out('0 Tw');

}

$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);

$i++;

$sep = -1;

$j = $i;

$l = 0;

$ns = 0;

$nl++;

if($border && $nl==2)

$b = $b2;

continue;

}

if($c==' ')

{

$sep = $i;

$ls = $l;

$ns++;

}

$l += $cw[$c];

if($l>$wmax)

{

// Automatic line break

if($sep==-1)

{

if($i==$j)

$i++;

if($this->ws>0)

{

$this->ws = 0;

$this->out('0 Tw');

}

$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);

}

else

{

if($align=='J')

{

$this->ws = ($ns>1) ? ($wmax-$ls)/1000*$this->FontSize/($ns-1) : 0;

$this->
out(sprintf('%.3F Tw',$this->ws*$this->k));

}

$this->Cell($w,$h,substr($s,$j,$sep-$j),$b,2,$align,$fill);

$i = $sep+1;

}

$sep = -1;

$j = $i;

$l = 0;

$ns = 0;

$nl++;

if($border && $nl==2)

$b = $b2;

}

else

$i++;

}

// Last chunk

if($this->ws>0)

{

$this->ws = 0;

$this->_out('0 Tw');

}

if($border && strpos($border,'B')!==false)

$b .= 'B';

$this->Cell($w,$h,substr($s,$j,$i-$j),$b,2,$align,$fill);

$this->x = $this->lMargin;

}



function Write($h, $txt, $link='')

{

// Output text in flowing mode

$cw = &$this->CurrentFont['cw'];

$w = $this->w-$this->rMargin-$this->x;

$wmax = ($w-2$this->cMargin)1000/$this->FontSize;

$s = str_replace("\r",'',$txt);

$nb = strlen($s);

$sep = -1;

$i = 0;

$j = 0;

$l = 0;

$nl = 1;

while($i<$nb)

{

// Get next character

$c = $s[$i];

if($c=="\n")

{

// Explicit line break

$this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link);

$i++;

$sep = -1;

$j = $i;

$l = 0;

if($nl==1)

{

$this->x = $this->lMargin;

$w = $this->w-$this->rMargin-$this->x;

$wmax = ($w-2$this->cMargin)1000/$this->FontSize;

}

$nl++;

continue;

}

if($c==' ')

$sep = $i;

$l += $cw[$c];

if($l>$wmax)

{

// Automatic line break

if($sep==-1)

{

if($this->x>$this->lMargin)

{

// Move to next line

$this->x = $this->lMargin;

$this->y += $h;

$w = $this->w-$this->rMargin-$this->x;

$wmax = ($w-2$this->cMargin)1000/$this->FontSize;

$i++;

$nl++;

continue;

}

if($i==$j)

$i++;

$this->Cell($w,$h,substr($s,$j,$i-$j),0,2,'',0,$link);

}

else

{

$this->Cell($w,$h,substr($s,$j,$sep-$j),0,2,'',0,$link);

$i = $sep+1;

}

$sep = -1;

$j = $i;

$l = 0;

if($nl==1)

{

$this->x = $this->lMargin;

$w = $this->w-$this->rMargin-$this->x;

$wmax = ($w-2$this->cMargin)1000/$this->FontSize;

}

$nl++;

}

else

$i++;

}

// Last chunk

if($i!=$j)

$this->Cell($l/1000*$this->FontSize,$h,substr($s,$j),0,0,'',0,$link);

}



function Ln($h=null)

{

// Line feed; default value is last cell height

$this->x = $this->lMargin;

if($h===null)

$this->y += $this->lasth;

else

$this->y += $h;

}



function Image($file, $x=null, $y=null, $w=0, $h=0, $type='', $link='')

{

// Put an image on the page

if(!isset($this->images[$file]))

{

// First use of this image, get info

if($type=='')

{

$pos = strrpos($file,'.');

if(!$pos)

$this->Error('Image file has no extension and no type was specified: '.$file);

$type = substr($file,$pos+1);

}

$type = strtolower($type);

if($type=='jpeg')

$type = 'jpg';

$mtd = 'parse'.$type;

if(!method
exists($this,$mtd))

$this->Error('Unsupported image type: '.$type);

$info = $this->$mtd($file);

$info['i'] = count($this->images)+1;

$this->images[$file] = $info;

}

else

$info = $this->images[$file];


// Automatic width and height calculation if needed
if($w==0 && $h==0)
{
// Put image at 96 dpi
$w = -96;
$h = -96;
}
if($w<0)
$w = -$info['w']*72/$w/$this->k;
if($h<0)
$h = -$info['h']*72/$h/$this->k;
if($w==0)
$w = $h*$info['w']/$info['h'];
if($h==0)
$h = $w*$info['h']/$info['w'];

// Flowing mode
if($y===null)
{
if($this->y+$h>$this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak())
{
// Automatic page break
$x2 = $this->x;
$this->AddPage($this->CurOrientation,$this->CurPageSize);
$this->x = $x2;
}
$y = $this->y;
$this->y += $h;
}

if($x===null)
$x = $this->x;
$this->_out(sprintf('q %.2F 0 0 %.2F %.2F %.2F cm /I%d Do Q',$w*$this->k,$h*$this->k,$x*$this->k,($this->h-($y+$h))*$this->k,$info['i']));
if($link)
$this->Link($x,$y,$w,$h,$link);

}



function GetX()

{

// Get x position

return $this->x;

}



function SetX($x)

{

// Set x position

if($x>=0)

$this->x = $x;

else

$this->x = $this->w+$x;

}



function GetY()

{

// Get y position

return $this->y;

}



function SetY($y)

{

// Set y position and reset x

$this->x = $this->lMargin;

if($y>=0)

$this->y = $y;

else

$this->y = $this->h+$y;

}



function SetXY($x, $y)

{

// Set x and y positions

$this->SetY($y);

$this->SetX($x);

}



function Output($name='', $dest='')

{

// Output PDF to some destination

if($this->state<3)

$this->Close();

$dest = strtoupper($dest);

if($dest=='')

{

if($name=='')

{

$name = 'doc.pdf';

$dest = 'I';

}

else

$dest = 'F';

}

switch($dest)

{

case 'I':

// Send to standard output

$this->checkoutput();

if(PHP
SAPI!='cli')

{

// We send to a browser

header('Content-Type: application/pdf');

header('Content-Disposition: inline; filename="'.$name.'"');

header('Cache-Control: private, max-age=0, must-revalidate');

header('Pragma: public');

}

echo $this->buffer;

break;

case 'D':

// Download file

$this->_checkoutput();

header('Content-Type: application/x-download');

header('Content-Disposition: attachment; filename="'.$name.'"');

header('Cache-Control: private, max-age=0, must-revalidate');

header('Pragma: public');

echo $this->buffer;

break;

case 'F':

// Save to local file

$f = fopen($name,'wb');

if(!$f)

$this->Error('Unable to create output file: '.$name);

fwrite($f,$this->buffer,strlen($this->buffer));


        fclose($f);
break;
case 'S':
// Return as a string
return $this->buffer;
default:
$this->Error('Incorrect output destination: '.$dest);
}
return '';

}



/*******************************************************************************

* *

* Protected methods *

* *

*******************************************************************************/

function dochecks()

{

// Check availability of %F

if(sprintf('%.1F',1.0)!='1.0')

$this->Error('This version of PHP is not supported');

// Check mbstring overloading

if(ini
get('mbstring.funcoverload') & 2)

$this->Error('mbstring overloading must be disabled');

// Ensure runtime magic quotes are disabled

if(get
magicquotesruntime())

@setmagicquotes_runtime(0);

}



function checkoutput()

{

if(PHP
SAPI!='cli')

{

if(headerssent($file,$line))

$this->Error("Some data has already been output, can't send PDF file (output started at $file:$line)");

}

if(ob
getlength())

{

// The output buffer is not empty

if(preg
match('/^(\xEF\xBB\xBF)?\s*$/',obgetcontents()))

{

// It contains only a UTF-8 BOM and/or whitespace, let's clean it

ob_clean();

}

else

$this->Error("Some data has already been output, can't send PDF file");

}

}



function getpagesize($size)

{

if(is
string($size))

{

$size = strtolower($size);

if(!isset($this->StdPageSizes[$size]))

$this->Error('Unknown page size: '.$size);

$a = $this->StdPageSizes[$size];

return array($a[0]/$this->k, $a[1]/$this->k);

}

else

{

if($size[0]>$size[1])

return array($size[1], $size[0]);

else

return $size;

}

}



function beginpage($orientation, $size)

{

$this->page++;

$this->pages[$this->page] = '';

$this->state = 2;

$this->x = $this->lMargin;

$this->y = $this->tMargin;

$this->FontFamily = '';

// Check page size and orientation

if($orientation=='')

$orientation = $this->DefOrientation;

else

$orientation = strtoupper($orientation[0]);

if($size=='')

$size = $this->DefPageSize;

else

$size = $this->
getpagesize($size);

if($orientation!=$this->CurOrientation || $size[0]!=$this->CurPageSize[0] || $size[1]!=$this->CurPageSize[1])

{

// New size or orientation

if($orientation=='P')

{

$this->w = $size[0];

$this->h = $size[1];

}

else

{

$this->w = $size[1];

$this->h = $size[0];

}

$this->wPt = $this->w$this->k;

$this->hPt = $this->h
$this->k;

$this->PageBreakTrigger = $this->h-$this->bMargin;

$this->CurOrientation = $orientation;

$this->CurPageSize = $size;

}

if($orientation!=$this->DefOrientation || $size[0]!=$this->DefPageSize[0] || $size[1]!=$this->DefPageSize[1])

$this->PageSizes[$this->page] = array($this->wPt, $this->hPt);

}



function _endpage()

{

$this->state = 1;

}



function loadfont($font)

{

// Load a font definition file from the font directory

include($this->fontpath.$font);

$a = get
defined_vars();

if(!isset($a['name']))

$this->Error('Could not include font definition file');

return $a;

}



function escape($s)

{

// Escape special characters in strings

$s = str
replace('\','\\',$s);

$s = strreplace('(','\(',$s);

$s = str
replace(')','\)',$s);

$s = str_replace("\r",'\r',$s);

return $s;

}



function textstring($s)

{

// Format a text string

return '('.$this->
escape($s).')';

}



function _UTF8toUTF16($s)

{

// Convert UTF-8 to UTF-16BE with BOM

$res = "\xFE\xFF";

$nb = strlen($s);

$i = 0;

while($i<$nb)

{

$c1 = ord($s[$i++]);

if($c1>=224)

{

// 3-byte character

$c2 = ord($s[$i++]);

$c3 = ord($s[$i++]);

$res .= chr((($c1 & 0x0F)<<4) + (($c2 & 0x3C)>>2));

$res .= chr((($c2 & 0x03)<<6) + ($c3 & 0x3F));

}

elseif($c1>=192)

{

// 2-byte character

$c2 = ord($s[$i++]);

$res .= chr(($c1 & 0x1C)>>2);

$res .= chr((($c1 & 0x03)<<6) + ($c2 & 0x3F));

}

else

{

// Single-byte character

$res .= "\0".chr($c1);

}

}

return $res;

}



function dounderline($x, $y, $txt)

{

// Underline text

$up = $this->CurrentFont['up'];

$ut = $this->CurrentFont['ut'];

$w = $this->GetStringWidth($txt)+$this->ws*substr
count($txt,' ');

return sprintf('%.2F %.2F %.2F %.2F re f',$x$this->k,($this->h-($y-$up/1000$this->FontSize))$this->k,$w$this->k,-$ut/1000*$this->FontSizePt);

}



function parsejpg($file)

{

// Extract info from a JPEG file

$a = getimagesize($file);

if(!$a)

$this->Error('Missing or incorrect image file: '.$file);

if($a[2]!=2)

$this->Error('Not a JPEG file: '.$file);

if(!isset($a['channels']) || $a['channels']==3)

$colspace = 'DeviceRGB';

elseif($a['channels']==4)

$colspace = 'DeviceCMYK';

else

$colspace = 'DeviceGray';

$bpc = isset($a['bits']) ? $a['bits'] : 8;

$data = file
get_contents($file);

return array('w'=>$a[0], 'h'=>$a[1], 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'DCTDecode', 'data'=>$data);

}



function parsepng($file)

{

// Extract info from a PNG file

$f = fopen($file,'rb');

if(!$f)

$this->Error('Can\'t open image file: '.$file);

$info = $this->
parsepngstream($f,$file);

fclose($f);

return $info;

}



function parsepngstream($f, $file)

{

// Check signature

if($this->
readstream($f,8)!=chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10))

$this->Error('Not a PNG file: '.$file);


// Read header chunk
$this->_readstream($f,4);
if($this->_readstream($f,4)!='IHDR')
$this->Error('Incorrect PNG file: '.$file);
$w = $this->_readint($f);
$h = $this->_readint($f);
$bpc = ord($this->_readstream($f,1));
if($bpc>8)
$this->Error('16-bit depth not supported: '.$file);
$ct = ord($this->_readstream($f,1));
if($ct==0 || $ct==4)
$colspace = 'DeviceGray';
elseif($ct==2 || $ct==6)
$colspace = 'DeviceRGB';
elseif($ct==3)
$colspace = 'Indexed';
else
$this->Error('Unknown color type: '.$file);
if(ord($this->_readstream($f,1))!=0)
$this->Error('Unknown compression method: '.$file);
if(ord($this->_readstream($f,1))!=0)
$this->Error('Unknown filter method: '.$file);
if(ord($this->_readstream($f,1))!=0)
$this->Error('Interlacing not supported: '.$file);
$this->_readstream($f,4);
$dp = '/Predictor 15 /Colors '.($colspace=='DeviceRGB' ? 3 : 1).' /BitsPerComponent '.$bpc.' /Columns '.$w;

// Scan chunks looking for palette, transparency and image data
$pal = '';
$trns = '';
$data = '';
do
{
$n = $this->_readint($f);
$type = $this->_readstream($f,4);
if($type=='PLTE')
{
// Read palette
$pal = $this->_readstream($f,$n);
$this->_readstream($f,4);
}
elseif($type=='tRNS')
{
// Read transparency info
$t = $this->_readstream($f,$n);
if($ct==0)
$trns = array(ord(substr($t,1,1)));
elseif($ct==2)
$trns = array(ord(substr($t,1,1)), ord(substr($t,3,1)), ord(substr($t,5,1)));
else
{
$pos = strpos($t,chr(0));
if($pos!==false)
$trns = array($pos);
}
$this->_readstream($f,4);
}
elseif($type=='IDAT')
{
// Read image data block
$data .= $this->_readstream($f,$n);
$this->_readstream($f,4);
}
elseif($type=='IEND')
break;
else
$this->_readstream($f,$n+4);
}
while($n);

if($colspace=='Indexed' && empty($pal))
$this->Error('Missing palette in '.$file);
$info = array('w'=>$w, 'h'=>$h, 'cs'=>$colspace, 'bpc'=>$bpc, 'f'=>'FlateDecode', 'dp'=>$dp, 'pal'=>$pal, 'trns'=>$trns);
if($ct>=4)
{
// Extract alpha channel
if(!function_exists('gzuncompress'))
$this->Error('Zlib not available, can\'t handle alpha channel: '.$file);
$data = gzuncompress($data);
$color = '';
$alpha = '';
if($ct==4)
{
// Gray image
$len = 2*$w;
for($i=0;$i<$h;$i++)
{
$pos = (1+$len)*$i;
$color .= $data[$pos];
$alpha .= $data[$pos];
$line = substr($data,$pos+1,$len);
$color .= preg_replace('/(.)./s','$1',$line);
$alpha .= preg_replace('/.(.)/s','$1',$line);
}
}
else
{
// RGB image
$len = 4*$w;
for($i=0;$i<$h;$i++)
{
$pos = (1+$len)*$i;
$color .= $data[$pos];
$alpha .= $data[$pos];
$line = substr($data,$pos+1,$len);
$color .= preg_replace('/(.{3})./s','$1',$line);
$alpha .= preg_replace('/.{3}(.)/s','$1',$line);
}
}
unset($data);
$data = gzcompress($color);
$info['smask'] = gzcompress($alpha);
if($this->PDFVersion<'1.4')
$this->PDFVersion = '1.4';
}
$info['data'] = $data;
return $info;

}



function _readstream($f, $n)

{

// Read n bytes from stream

$res = '';

while($n>0 && !feof($f))

{

$s = fread($f,$n);

if($s===false)

$this->Error('Error while reading stream');

$n -= strlen($s);

$res .= $s;

}

if($n>0)

$this->Error('Unexpected end of stream');

return $res;

}



function readint($f)

{

// Read a 4-byte integer from stream

$a = unpack('Ni',$this->
readstream($f,4));

return $a['i'];

}



function parsegif($file)

{

// Extract info from a GIF file (via PNG conversion)

if(!function
exists('imagepng'))

$this->Error('GD extension is required for GIF support');

if(!functionexists('imagecreatefromgif'))

$this->Error('GD has no GIF read support');

$im = imagecreatefromgif($file);

if(!$im)

$this->Error('Missing or incorrect image file: '.$file);

imageinterlace($im,0);

$f = @fopen('php://temp','rb+');

if($f)

{

// Perform conversion in memory

ob
start();

imagepng($im);

$data = obgetclean();

imagedestroy($im);


    fwrite($f,$data);
rewind($f);
$info = $this->_parsepngstream($f,$file);
fclose($f);
}
else
{
// Use temporary file
$tmp = tempnam('.','gif');
if(!$tmp)
$this->Error('Unable to create a temporary file');
if(!imagepng($im,$tmp))
$this->Error('Error while saving to temporary file');
imagedestroy($im);
$info = $this->_parsepng($tmp);
unlink($tmp);
}
return $info;

}



function newobj()

{

// Begin a new object

$this->n++;

$this->offsets[$this->n] = strlen($this->buffer);

$this->
out($this->n.' 0 obj');

}



function putstream($s)

{

$this->
out('stream');

$this->out($s);

$this->
out('endstream');

}



function _out($s)

{

// Add a line to the document

if($this->state==2)

$this->pages[$this->page] .= $s."\n";

else

$this->buffer .= $s."\n";

}



function putpages()

{

$nb = $this->page;

if(!empty($this->AliasNbPages))

{

// Replace number of pages

for($n=1;$n<=$nb;$n++)

$this->pages[$n] = str
replace($this->AliasNbPages,$nb,$this->pages[$n]);

}

if($this->DefOrientation=='P')

{

$wPt = $this->DefPageSize[0]$this->k;

$hPt = $this->DefPageSize[1]
$this->k;

}

else

{

$wPt = $this->DefPageSize[1]$this->k;

$hPt = $this->DefPageSize[0]
$this->k;

}

$filter = ($this->compress) ? '/Filter /FlateDecode ' : '';

for($n=1;$n<=$nb;$n++)

{

// Page

$this->newobj();

$this->
out('<</Type /Page');

$this->out('/Parent 1 0 R');

if(isset($this->PageSizes[$n]))

$this->
out(sprintf('/MediaBox [0 0 %.2F %.2F]',$this->PageSizes[$n][0],$this->PageSizes[$n][1]));

$this->out('/Resources 2 0 R');

if(isset($this->PageLinks[$n]))

{

// Links

$annots = '/Annots [';

foreach($this->PageLinks[$n] as $pl)

{

$rect = sprintf('%.2F %.2F %.2F %.2F',$pl[0],$pl[1],$pl[0]+$pl[2],$pl[1]-$pl[3]);

$annots .= '<</Type /Annot /Subtype /Link /Rect ['.$rect.'] /Border [0 0 0] ';

if(is
string($pl[4]))

$annots .= '/A <</S /URI /URI '.$this->textstring($pl[4]).'>>>>';

else

{

$l = $this->links[$pl[4]];

$h = isset($this->PageSizes[$l[0]]) ? $this->PageSizes[$l[0]][1] : $hPt;

$annots .= sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]>>',1+2$l[0],$h-$l[1]$this->k);

}

}

$this->
out($annots.']');

}

if($this->PDFVersion>'1.3')

$this->out('/Group <</Type /Group /S /Transparency /CS /DeviceRGB>>');

$this->
out('/Contents '.($this->n+1).' 0 R>>');

$this->out('endobj');

// Page content

$p = ($this->compress) ? gzcompress($this->pages[$n]) : $this->pages[$n];

$this->
newobj();

$this->_out('<&lt*


všeč(0) ni všeč(1) spam(0)
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se