klopar

Statistika

Pridružen/a:
17 feb 2012, 11:45
Zadnjič aktiven:
03 nov 2025, 06:29
Prispevki:
Teme:
136 | Vse teme
78
113
24

Podpis

#9

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)
#7

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)
#6

Hvala bom ponovno poskusil in javim :) hvala


všeč(0) ni všeč(0) spam(0)
#4

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)
#

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)
#6

Bi prosil, če mi lahko kdo pove kako izgleda pravilen redirect 404? Ker jaz imam to nastavljeno v apachiju.



Bom probal pogledal tudi loge.



mio ali tebi dela redirect 404? če vpišeš naprimer domena.si/asdasda



Hvala


všeč(0) ni všeč(0) spam(0)
#3

Hvala za odgovor, vendar mi še vedno ne deluje. Sem poskusil s povezavo, vendar tudi ne deluje :(



mio to deluje vendar ob napaki, se mi ne vrne na index


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

Pozdravljeni zopet sem se znašel pri novi težavi.



Sedaj pa imam v apachiju PHP nastavljeno tako, da če datoteke oziroma mape ni, da mi naredi 404 redirect ( se vrne nazaj na index.php). Težava pa se pojavi, če v .htaccas dodam naslednje trvi vrstice:



RewriteCond %{REQUESTFILENAME} !-f

RewriteCond %{REQUEST
FILENAME} !-d

RewriteRule ^([^/]*)$ /nekaj.php?file=$1 [NC]



Od takrat naprej mi stvar ne deluje ( ne preosmeri ). Vedno se poveže na nekaj.php kljub temu da vpišem mapo oziroma datoteko, ki je ni. Zgornjo kodo pa sem uporabil, da bi naredil krajšo povezavo:



Daljša je izgledala tako: www.domena.si/nekaj.php?file=test_test



Rad pa bi dobil krajšo kot naprimer



www.domena.si/test_test



Hvala vsem za pomoč in lep pozdrav


všeč(0) ni všeč(0) spam(0)
#8

Aha sedaj pa razumem :). Najlepša hvala vsem za pomoč.


všeč(0) ni všeč(0) spam(0)
#6

Se opravičujem za ponovni post, sem ga hotel spremeniti vendar ni šlo... Sedaj sem naredil tako kot je potrebno. Res pa je, da imam eno vprašanje. Ali za indixiranje večih strani potrebno še kaj, kar bi izboljšalo iskanje na googlu? Hvala in lep pozdrav


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