!C99Shell v. 1.0 pre-release build #13!

Software: Apache/2.0.54 (Unix) mod_perl/1.99_09 Perl/v5.8.0 mod_ssl/2.0.54 OpenSSL/0.9.7l DAV/2 FrontPage/5.0.2.2635 PHP/4.4.0 mod_gzip/2.0.26.1a 

uname -a: Linux snow.he.net 4.4.276-v2-mono-1 #1 SMP Wed Jul 21 11:21:17 PDT 2021 i686 

uid=99(nobody) gid=98(nobody) groups=98(nobody) 

Safe-mode: OFF (not secure)

/home/makras/public_html/db_admin/libraries/fpdf/   drwxr-xr-x
Free 318.39 GB of 458.09 GB (69.5%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     fpdf.php (76.85 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/* $Id: fpdf.php,v 2.1 2003/11/20 16:31:51 garvinhicking Exp $ */
// vim: expandtab sw=4 ts=4 sts=4:

/****************************************************************************
* Software : FPDF                                                           *
* Version :  1.51                                                           *
* Date :     2002/08/03                                                     *
* Author :   Olivier PLATHEY                                                *
* Website :  http://www.fpdf.org                                            *
* Licence :  Freeware                                                       *
*                                                                           *
* You are entitled to modify this soft as you want to.                      *
****************************************************************************/


$FPDF_version = (string) '1.51';


/**
 * The FPDF class
 */
class FPDF
{
    
/**
     * Defines private properties
     */
    
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 $DefOrientation;     // default orientation
    
var $CurOrientation;     // current orientation
    
var $OrientationChanges// array indicating orientation changes
    
var $fwPt$fhPt;        // dimensions of page format in points
    
var $fw$fh;            // dimensions of page format in user unit
    
var $wPt$hPt;          // current dimensions of page in points
    
var $k;                  // scale factor (number of points in user unit)
    
var $w$h;              // current dimensions of 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 for cell positionning
    
var $lasth;              // height of last cell printed
    
var $LineWidth;          // line width in user unit
    
var $CoreFonts;          // array of standard font names
    
var $fonts;              // array of used fonts
    
var $FontFiles;          // array of font files
    
var $diffs;              // array of encoding differences
    
var $images;             // array of used images
    
var $PageLinks;          // array of links in pages
    
var $links;              // array of internal links
    
var $FontFamily;         // current font family
    
var $FontStyle;          // current font style
    
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 $underline;          // whether underline is current state or not
    
var $AutoPageBreak;      // automatic page breaking
    
var $PageBreakTrigger;   // threshold used to trigger page breaks
    
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



    /**************************************************************************
    *                                                                         *
    *      Public methods below are used by some private ones. Then they      *
    *      are placed at the top of the class.                                *
    *                                                                         *
    **************************************************************************/

    /**
     * Gets the width of a string in the current font
     *
     * @param   string   The string to check
     *
     * @return  double  The string width
     *
     * @access  public
     */
    
function GetStringWidth($s)
    {
        
$s     = (string) $s;
        
// loic1: PHP3 compatibility
        // $cw    = &$this->CurrentFont['cw'];
        
$w     0;
        
$l     strlen($s);
        for (
$i 0$i $l$i++) {
            
// $w += $cw[$s[$i]];
            
$w += $this->CurrentFont['cw'][$s[$i]];
        } 
// end for

        
return $w $this->FontSize 1000;
    } 
// end of the "GetStringWidth()" method


    /**
     * Displays an error message then exists
     *
     * @param  string  The error message
     *
     * @access public
     */
    
function Error($msg)
    {
        die(
'<b>FPDF error: </b>' $msg);
    } 
// end of the "Error()" method



    /**************************************************************************
    *                                                                         *
    *                             Private methods                             *
    *                                                                         *
    **************************************************************************/

    /**
     * Adds a line to the document
     *
     * @param   string   The string to add
     *
     * @access  private
     */
    
function _out($s)
    {
        if (
$this->state == 2) {
            
$this->pages[$this->page] .= $s "\n";
        } else {
            
$this->buffer             .= $s "\n";
        }
    } 
// end of the "_out()" method


    /**
     * Starts a new object
     *
     * @access private
     */
    
function _newobj()
    {
        
$this->n++;
        
$this->offsets[$this->n] = strlen($this->buffer);
        
$this->_out($this->' 0 obj');
    } 
// end of the "_newobj()" method


    /**
     * Adds a "\" before "\", "(" and ")" characters
     *
     * @param   string   The string to slash
     *
     * @return  integer  The slashed string
     *
     * @access  private
     */
    
function _escape($s)
    {
        return 
str_replace(')''\\)'str_replace('(''\\('str_replace('\\''\\\\'$s)));
    } 
// end of the "_escape()" method


    /**
     * Formats a text stringrs
     *
     * @param   string   The string to format
     *
     * @return  integer  The formatted string
     *
     * @access  private
     *
     * @see     _escape()
     */
    
function _textstring($s)
    {
        return 
'(' $this->_escape($s) . ')';
    } 
// end of the "_textstring()" method


    /**
     * Outputs a stream
     *
     * @param   string   The stream to ouput
     *
     * @access  private
     *
     * @see     _out()
     */
    
function _putstream($s)
    {
        
$this->_out('stream');
        
$this->_out($s);
        
$this->_out('endstream');
    } 
// end of the "_putstream()" method


    /**
     * Starts document
     *
     * @access private
     */
    
function _begindoc()
    {
        
$this->state 1;
        
$this->_out('%PDF-1.3');
    } 
// end of the "_begindoc()" method


    /**
     * Puts pages
     *
     * @access private
     */
    
function _putpages()
    {
        
$nb $this->page;

        if (!empty(
$this->AliasNbPages)) {
            
// Replaces 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->fwPt;
            
$hPt $this->fhPt;
        } else {
            
$wPt $this->fhPt;
            
$hPt $this->fwPt;
        }
        
$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->OrientationChanges[$n])) {
                
$this->_out(sprintf('/MediaBox [0 0 %.2f %.2f]'$hPt$wPt));
            }
            
$this->_out('/Resources 2 0 R');
            if (isset(
$this->PageLinks[$n])) {
                
// Links
                
$annots         '/Annots [';
                
reset($this->PageLinks[$n]);
                while (list(, 
$pl) = each($this->PageLinks[$n])) {
                    
$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->OrientationChanges[$l[0]]) ? $wPt $hPt;
                        
$annots .= sprintf('/Dest [%d 0 R /XYZ 0 %.2f null]>>'$l[0], $h $l[1] * $this->k);
                    }
                } 
// end while
                
$this->_out($annots ']');
            } 
// end if
            
$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('<<' $filter '/Length ' strlen($p) . '>>');
            
$this->_putstream($p);
            
$this->_out('endobj');
        } 
// end for

        // Pages root
        
$this->offsets[1]=strlen($this->buffer);
        
$this->_out('1 0 obj');
        
$this->_out('<</Type /Pages');
        
$kids     '/Kids [';
        for (
$i 0$i $nb$i++) {
            
$kids .= ($i) . ' 0 R ';
        }
        
$this->_out($kids ']');
        
$this->_out('/Count ' $nb);
        
$this->_out(sprintf('/MediaBox [0 0 %.2f %.2f]'$wPt$hPt));
        
$this->_out('>>');
        
$this->_out('endobj');
    } 
// end of the "_putpages()" method


    /**
     * Puts font faces
     *
     * @access private
     */
    
function _putfonts()
    {
        
$nf $this->n;

        foreach(
$this->diffs AS $diff) {
            
// Encodings
            
$this->_newobj();
            
$this->_out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [' $diff ']>>');
            
$this->_out('endobj');
        } 
// end while

        
$mqr get_magic_quotes_runtime();
        
set_magic_quotes_runtime(0);

        foreach(
$this->FontFiles AS $file => $info) {
            
// Font file embedding
            
$this->_newobj();
            
$this->FontFiles[$file]['n'] = $this->n;
            if (isset(
$GLOBALS['FPDF_font_path'])) {
                
$file $GLOBALS['FPDF_font_path'] . $file;
            }
            
$size     filesize($file);
            if (!
$size) {
                
$this->Error('Font file not found');
            }
            
$this->_out('<</Length ' $size);
            if (
substr($file, -2) == '.z') {
                
$this->_out('/Filter /FlateDecode');
            }
            
$this->_out('/Length1 ' $info['length1']);
            if (isset(
$info['length2'])) {
                
$this->_out('/Length2 ' $info['length2'] . ' /Length3 0');
            }
            
$this->_out('>>');
            
$f fopen($file'rb');
            
$this->_putstream(fread($f$size));
            
fclose($f);
            
$this->_out('endobj');
        } 
// end while
        
set_magic_quotes_runtime($mqr);

        foreach(
$this->fonts AS $k => $font) {
            
// Font objects
            
$this->_newobj();
            
$this->fonts[$k]['n'] = $this->n;
            
$name                 $font['name'];
            
$this->_out('<</Type /Font');
            
$this->_out('/BaseFont /' $name);
            if (
$font['type'] == 'core')  {
                
// Standard font
                
$this->_out('/Subtype /Type1');
                if (
$name != 'Symbol' && $name != 'ZapfDingbats') {
                    
$this->_out('/Encoding /WinAnsiEncoding');
                }
            }
            else {
                
// Additional font
                
$this->_out('/Subtype /' $font['type']);
                
$this->_out('/FirstChar 32');
                
$this->_out('/LastChar 255');
                
$this->_out('/Widths ' . ($this->1) . ' 0 R');
                
$this->_out('/FontDescriptor ' . ($this->2) . ' 0 R');
                if (
$font['enc']) {
                    if (isset(
$font['diff'])) {
                        
$this->_out('/Encoding ' . ($nf $font['diff']) . ' 0 R');
                    } else {
                        
$this->_out('/Encoding /WinAnsiEncoding');
                    }
                }
            } 
// end if... else...
            
$this->_out('>>');
            
$this->_out('endobj');
            if (
$font['type'] != 'core')  {
                
// Widths
                
$this->_newobj();
                
$s     '[';
                for (
$i 32$i <= 255$i++) {
                    
$s .= $font['cw'][chr($i)] . ' ';
                }
                
$this->_out($s ']');
                
$this->_out('endobj');
                
// Descriptor
                
$this->_newobj();
                
$s     '<</Type /FontDescriptor /FontName /' $name;
                foreach(
$font['desc'] AS $k => $v) {
                    
$s .= ' /' $k ' ' $v;
                }
                
$file $font['file'];
                if (
$file) {
                    
$s .= ' /FontFile' . ($font['type'] == 'Type1' '' '2') . ' ' $this->FontFiles[$file]['n'] . ' 0 R';
                }
                
$this->_out($s '>>');
                
$this->_out('endobj');
            } 
// end if
        
// end while
    
// end of the "_putfonts()" method


    /**
     * Puts images
     *
     * @access private
     */
    
function _putimages()
    {
        
$filter = ($this->compress) ? '/Filter /FlateDecode ' '';

        foreach(
$this->images AS $file => $info) {
            
$this->_newobj();
            
$this->images[$file]['n'] = $this->n;
            
$this->_out('<</Type /XObject');
            
$this->_out('/Subtype /Image');
            
$this->_out('/Width ' $info['w']);
            
$this->_out('/Height ' $info['h']);
            if (
$info['cs'] == 'Indexed') {
                
$this->_out('/ColorSpace [/Indexed /DeviceRGB ' . (strlen($info['pal'])/ 1) . ' ' . ($this->1) . ' 0 R]');
            }
            else {
                
$this->_out('/ColorSpace /' $info['cs']);
                if (
$info['cs'] == 'DeviceCMYK') {
                    
$this->_out('/Decode [1 0 1 0 1 0 1 0]');
                }
            } 
// end if... else...
            
$this->_out('/BitsPerComponent ' $info['bpc']);
            
$this->_out('/Filter /' $info['f']);
            if (isset(
$info['parms'])) {
                
$this->_out($info['parms']);
            }
            if (isset(
$info['trns']) && is_array($info['trns'])) {
                
$trns     '';
                
$trns_cnt count($info['trns']);
                for (
$i 0$i $trns_cnt$i++) {
                    
$trns .= $info['trns'][$i] . ' ' $info['trns'][$i] . ' ';
                }
                
$this->_out('/Mask [' $trns ']');
            } 
// end if
            
$this->_out('/Length ' strlen($info['data']) . '>>');
            
$this->_putstream($info['data']);
            
$this->_out('endobj');

            
// Palette
            
if ($info['cs'] == 'Indexed') {
                
$this->_newobj();
                
$pal = ($this->compress) ? gzcompress($info['pal']) : $info['pal'];
                
$this->_out('<<' $filter '/Length ' strlen($pal) . '>>');
                
$this->_putstream($pal);
                
$this->_out('endobj');
            } 
// end if
        
// end while
    
// end of the "_putimages()" method


    /**
     * Puts resources
     *
     * @access private
     */
    
function _putresources()
    {
        
$this->_putfonts();
        
$this->_putimages();
        
// Resource dictionary
        
$this->offsets[2] = strlen($this->buffer);
        
$this->_out('2 0 obj');
        
$this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
        
$this->_out('/Font <<');
        foreach(
$this->fonts AS $font) {
            
$this->_out('/F' $font['i'] . ' ' $font['n'] . ' 0 R');
        }
        
$this->_out('>>');
        if (
count($this->images)) {
            
$this->_out('/XObject <<');
            foreach(
$this->images AS $image) {
                
$this->_out('/I' $image['i'] . ' ' $image['n'] . ' 0 R');
            }
            
$this->_out('>>');
        }
        
$this->_out('>>');
        
$this->_out('endobj');
    } 
// end of the "_putresources()" method


    /**
     * Puts document informations
     *
     * @access private
     */
    
function _putinfo()
    {
        
// loic1: PHP3 compatibility
        // $this->_out('/Producer ' . $this->_textstring('FPDF ' . FPDF_VERSION));
        
$this->_out('/Producer ' $this->_textstring('FPDF ' $GLOBALS['FPDF_version']));
        if (!empty(
$this->title)) {
            
$this->_out('/Title ' $this->_textstring($this->title));
        }
        if (!empty(
$this->subject)) {
            
$this->_out('/Subject ' $this->_textstring($this->subject));
        }
        if (!empty(
$this->author)) {
            
$this->_out('/Author ' $this->_textstring($this->author));
        }
        if (!empty(
$this->keywords)) {
            
$this->_out('/Keywords ' $this->_textstring($this->keywords));
        }
        if (!empty(
$this->creator)) {
            
$this->_out('/Creator ' $this->_textstring($this->creator));
        }
        
$this->_out('/CreationDate ' $this->_textstring('D:' date('YmdHis')));
    } 
// end of the "_putinfo()" method


    /**
     * Puts catalog informations
     *
     * @access private
     */
    
function _putcatalog()
    {
        
$this->_out('/Type /Catalog');
        
$this->_out('/Pages 1 0 R');
        if (
$this->ZoomMode == 'fullpage') {
            
$this->_out('/OpenAction [3 0 R /Fit]');
        } else if (
$this->ZoomMode == 'fullwidth') {
            
$this->_out('/OpenAction [3 0 R /FitH null]');
        } else if (
$this->ZoomMode == 'real') {
            
$this->_out('/OpenAction [3 0 R /XYZ null null 1]');
        } else if (!
is_string($this->ZoomMode)) {
            
$this->_out('/OpenAction [3 0 R /XYZ null null ' . ($this->ZoomMode 100) . ']');
        }
        if (
$this->LayoutMode == 'single') {
            
$this->_out('/PageLayout /SinglePage');
        } else if (
$this->LayoutMode == 'continuous') {
            
$this->_out('/PageLayout /OneColumn');
        } else if (
$this->LayoutMode == 'two') {
            
$this->_out('/PageLayout /TwoColumnLeft');
        }
    } 
// end of the "_putcatalog()" method


    /**
     * Puts trailer
     *
     * @access private
     */
    
function _puttrailer()
    {
        
$this->_out('/Size ' . ($this->1));
        
$this->_out('/Root ' $this->' 0 R');
        
$this->_out('/Info ' . ($this->1) . ' 0 R');
    } 
// end of the "_puttrailer()" method


    /**
     * Terminates document
     *
     * @access private
     */
    
function _enddoc()
    {
        
$this->_putpages();
        
$this->_putresources();

        
// Info
        
$this->_newobj();
        
$this->_out('<<');
        
$this->_putinfo();
        
$this->_out('>>');
        
$this->_out('endobj');

        
// Catalog
        
$this->_newobj();
        
$this->_out('<<');
        
$this->_putcatalog();
        
$this->_out('>>');
        
$this->_out('endobj');

        
// Cross-ref
        
$o strlen($this->buffer);
        
$this->_out('xref');
        
$this->_out('0 ' . ($this->1));
        
$this->_out('0000000000 65535 f ');
        for (
$i 1$i <= $this->n$i++) {
            
$this->_out(sprintf('%010d 00000 n '$this->offsets[$i]));
        }

        
// Trailer
        
$this->_out('trailer');
        
$this->_out('<<');
        
$this->_puttrailer();
        
$this->_out('>>');
        
$this->_out('startxref');
        
$this->_out($o);
        
$this->_out('%%EOF');
        
$this->state=3;
    } 
// end of the "_enddoc()" method


    /**
     * Starts a new page
     *
     * @param  string   The page orientation
     *
     * @access private
     */
    
function _beginpage($orientation)
    {
        
$this->page++;
        
$this->pages[$this->page] = '';
        
$this->state              2;
        
$this->x                  $this->lMargin;
        
$this->y                  $this->tMargin;
        
$this->lasth              0;
        
$this->FontFamily         '';

        
// Page orientation
        
if (!$orientation) {
            
$orientation $this->DefOrientation;
        } else {
            
$orientation strtoupper($orientation[0]);
        }
        if (
$orientation != $this->DefOrientation) {
            
$this->OrientationChanges[$this->page] = TRUE;
        }
        if (
$orientation != $this->CurOrientation) {
            
// Changes orientation
            
if ($orientation == 'P') {
                
$this->wPt $this->fwPt;
                
$this->hPt $this->fhPt;
                
$this->w   $this->fw;
                
$this->h   $this->fh;
            }
            else {
                
$this->wPt $this->fhPt;
                
$this->hPt $this->fwPt;
                
$this->w   $this->fh;
                
$this->h   $this->fw;
            }
            
$this->PageBreakTrigger $this->$this->bMargin;
            
$this->CurOrientation   $orientation;
        } 
// end if
    
// end of the "_beginpage()" method


    /**
     * Ends page contents
     *
     * @access private
     */
    
function _endpage()
    {
        
$this->state=1;
    } 
// end of the "_endpage()" method


    /**
     * Underlines text
     *
     * @param   double  The x position
     * @param   double  The y position
     * @param   string  The text
     *
     * @return  string  The underlined text
     *
     * @access  private
     */
    
function _dounderline($x,$y,$txt)
    {
        
$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->- ($y $up 1000 $this->FontSize)) * $this->k$w $this->k, -$ut 1000 $this->FontSizePt);
    } 
// end of the "_dounderline()" method


    /**
     * Extracts info from a JPEG file
     *
     * @param   string  The file name and path
     *
     * @return  array   The images informations
     *
     * @access  private
     */
    
function _parsejpg($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';
        }
        else if(
$a['channels'] == 4) {
            
$colspace 'DeviceCMYK';
        }
        else {
            
$colspace 'DeviceGray';
        }
        
$bpc = isset($a['bits']) ? $a['bits'] : 8;

        
// Reads whole file
        
$f    fopen($file'rb');
        
$data fread($ffilesize($file));
        
fclose($f);

        return array(
'w'    => $a[0],
                     
'h'    => $a[1],
                     
'cs'   => $colspace,
                     
'bpc'  => $bpc,
                     
'f'    => 'DCTDecode',
                     
'data' => $data);
    } 
// end of the "_parsejpg()" method


    /**
     * Reads a 4-byte integer from a file
     *
     * @param   string   The file name and path
     *
     * @return  integer  The 4-byte integer
     *
     * @access  private
     *
     * @see     _parsepng()
     */
    
function _freadint($f)
    {
        
$i ord(fread($f1)) << 24;
        
$i += ord(fread($f1)) << 16;
        
$i += ord(fread($f1)) << 8;
        
$i += ord(fread($f1));

        return 
$i;
    } 
// end of the "_freadint()" method


    /**
     * Extracts info from a PNG file
     *
     * @param   string  The file name and path
     *
     * @return  array   The images informations
     *
     * @access  private
     *
     * @see     _freadint()
     */
    
function _parsepng($file)
    {
        
$f fopen($file'rb');
        if (!
$f) {
            
$this->Error('Can\'t open image file: ' $file);
        }

        
// Checks signature
        
if (fread($f8) != chr(137) . 'PNG' chr(13) . chr(10) . chr(26) . chr(10)) {
            
$this->Error('Not a PNG file: ' $file);
        }

        
// Reads header chunk
        
fread($f,4);
        if (
fread($f4) != 'IHDR') {
            
$this->Error('Incorrect PNG file: ' $file);
        }
        
$w   $this->_freadint($f);
        
$h   $this->_freadint($f);
        
$bpc ord(fread($f,1));
        if (
$bpc 8) {
            
$this->Error('16-bit depth not supported: ' $file);
        }
        
$ct  ord(fread($f1));
        if (
$ct == 0) {
            
$colspace 'DeviceGray';
        }
        else if (
$ct == 2) {
            
$colspace 'DeviceRGB';
        }
        else if (
$ct == 3) {
            
$colspace 'Indexed';
        }
        else {
            
$this->Error('Alpha channel not supported: ' $file);
        }
        if (
ord(fread($f1)) != 0) {
            
$this->Error('Unknown compression method: ' $file);
        }
        if (
ord(fread($f1)) != 0) {
            
$this->Error('Unknown filter method: ' $file);
        }
        if (
ord(fread($f1)) != 0) {
            
$this->Error('Interlacing not supported: ' $file);
        }
        
fread($f4);
        
$parms '/DecodeParms <</Predictor 15 /Colors ' . ($ct == 1)
               . 
' /BitsPerComponent ' $bpc
               
' /Columns ' $w '>>';

        
// Scans chunks looking for palette, transparency and image data
        
$pal  '';
        
$trns '';
        
$data '';
        do {
            
$n    $this->_freadint($f);
            
$type fread($f4);
            if (
$type == 'PLTE') {
                
// Reads palette
                
$pal fread($f$n);
                
fread($f4);
            }
            else if (
$type == 'tRNS') {
                
// Reads transparency info
                
$t            fread($f$n);
                if (
$ct == 0) {
                    
$trns     = array(ord(substr($t11)));
                }
                else if (
$ct == 2) {
                    
$trns     = array(ord(substr($t11)), ord(substr($t31)), ord(substr($t51)));
                }
                else {
                    
$pos      strpos(' ' $tchr(0));
                    if (
$pos) {
                        
$trns = array($pos 1);
                    }
                    
fread($f,4);
                } 
// end if... else if... else
            
}
            else if (
$type == 'IDAT') {
                
// Reads image data block
                
$data .= fread($f$n);
                
fread($f4);
            }
            else if (
$type == 'IEND') {
                break;
            }
            else {
                
fread($f$n 4);
            } 
// end if... else if... else
        
} while($n); // end do

        
if ($colspace == 'Indexed' && empty($pal)) {
            
$this->Error('Missing palette in ' $file);
        }
        
fclose($f);

        return array(
'w'     => $w,
                     
'h'     => $h,
                     
'cs'    => $colspace,
                     
'bpc'   => $bpc,
                     
'f'     => 'FlateDecode',
                     
'parms' => $parms,
                     
'pal'   => $pal,
                     
'trns'  => $trns,
                     
'data'  => $data);
    } 
// end of the "_parsepng()" method



    /**************************************************************************
    *                                                                         *
    *                             Public methods                              *
    *                                                                         *
    **************************************************************************/

    /**
     * Sets auto page break mode and triggering margin
     *
     * @param  string  The auto page break mode
     * @param  double  Maximum size till the bottom of the page to start adding
     *                 page break
     *
     * @access public
     */
    
function SetAutoPageBreak($auto$margin 0)
    {
        
$this->AutoPageBreak    $auto;
        
$this->bMargin          $margin;
        
$this->PageBreakTrigger $this->$margin;
    } 
// end of the "SetAutoPageBreak()" method


    /**
     * Sets display mode in viewer
     *
     * @param  mixed   The zoom mode (fullpage, fullwidth, real, default,
     *                 zoom or an zoom factor -real-)
     * @param  string  The layout mode (single, continuous, two or default)
     *
     * @access public
     */
    
function SetDisplayMode($zoom 'default'$layout 'continuous')
    {
        if (
is_string($zoom)) {
            
$zoom strtolower($zoom);
        }
        
$layout   strtolower($layout);

        
// Zoom mode
        
if ($zoom == 'fullpage' || $zoom == 'fullwidth' || $zoom == 'real' || $zoom == 'default'
            
|| !is_string($zoom)) {
            
$this->ZoomMode $zoom;
        } else if (
$zoom == 'zoom') {
            
$this->ZoomMode $layout;
        } else {
            
$this->Error('Incorrect zoom display mode: ' $zoom);
        } 
// end if... else if... else...

        // Layout mode
        
if ($layout == 'single' || $layout == 'continuous' || $layout=='two' || $layout=='default') {
            
$this->LayoutMode $layout;
        } else if (
$zoom != 'zoom') {
            
$this->Error('Incorrect layout display mode: ' $layout);
        } 
// end if... else if...
    
// end of the "SetDisplayMode()" method


    /**
     * Sets page compression
     *
     * @param  boolean  whether to compress file or not
     *
     * @access public
     */
    
function SetCompression($compress)
    {
        if (
function_exists('gzcompress')) {
            
$this->compress $compress;
        } else {
            
$this->compress FALSE;
        } 
// end if... else...
    
// end of the "SetCompression()" method


    /**
     * Sets page margins
     *
     * @param  double  The left margin
     * @param  double  The top margin
     * @param  double  The right margin
     *
     * @access public
     */
    
function SetMargins($left$top$right = -1)
    {
        
$this->lMargin $left;
        
$this->tMargin $top;
        if (
$right == -1) {
            
$right $left;
        }
        
$this->rMargin $right;
    } 
// end of the "SetMargins()" method


    /**
     * The FPDF constructor
     *
     * @param  string  The page orientation (p, portrait, l or landscape)
     * @param  string  The unit for sizes (pt, mm, cm or in)
     * @param  mixed   The page format (A3, A4, A5, letter, legal or an array
     *                 with page sizes)
     *
     * @access public
     */
    
function FPDF($orientation 'P'$unit 'mm'$format 'A4')
    {
        
// Check for PHP locale-related bug
        
if (1.1 == 1) {
            
$this->Error('Don\'t call setlocale() before including class file');
        }

        
// Initialization of properties
        
$this->page               0;
        
$this->n                  2;
        
$this->buffer             '';
        
$this->pages              = array();
        
$this->OrientationChanges = array();
        
$this->state              0;
        
$this->fonts              = array();
        
$this->FontFiles          = array();
        
$this->diffs              = array();
        
$this->images             = array();
        
$this->links              = array();
        
$this->InFooter           FALSE;
        
$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;

        
// Standard fonts
        
$this->CoreFonts['courier']      = 'Courier';
        
$this->CoreFonts['courierB']     = 'Courier-Bold';
        
$this->CoreFonts['courierI']     = 'Courier-Oblique';
        
$this->CoreFonts['courierBI']    = 'Courier-BoldOblique';
        
$this->CoreFonts['helvetica']    = 'Helvetica';
        
$this->CoreFonts['helveticaB']   = 'Helvetica-Bold';
        
$this->CoreFonts['helveticaI']   = 'Helvetica-Oblique';
        
$this->CoreFonts['helveticaBI']  = 'Helvetica-BoldOblique';
        
$this->CoreFonts['times']        = 'Times-Roman';
        
$this->CoreFonts['timesB']       = 'Times-Bold';
        
$this->CoreFonts['timesI']       = 'Times-Italic';
        
$this->CoreFonts['timesBI']      = 'Times-BoldItalic';
        
$this->CoreFonts['symbol']       = 'Symbol';
        
$this->CoreFonts['zapfdingbats'] = 'ZapfDingbats';

        
// Scale factor
        
if ($unit == 'pt') {
            
$this->1;
        } else if (
$unit == 'mm') {
            
$this->72/25.4;
        } else if (
$unit == 'cm') {
            
$this->72/2.54;
        } else if (
$unit == 'in') {
            
$this->72;
        } else {
            
$this->Error('Incorrect unit: ' $unit);
        } 
// end if... else if... else...

        // Page format
        
if (is_string($format)) {
            
// 2002-07-24 - Nicola Asuni (info@tecnick.com)
            // Added new page formats (45 standard ISO paper formats and 4
            // american common formats).
            // Paper cordinates are calculated in this way:
            //    (inches * 72) where (1 inch = 2.54 cm)
            
switch (strtoupper($format)) {
                case 
'4A0':
                    
$format = array(4767.876740.79);
                    break;
                case 
'2A0':
                    
$format = array(3370.394767.87);
                    break;
                case 
'A0':
                    
$format = array(2383.943370.39);
                    break;
                case 
'A1':
                    
$format = array(1683.782383.94);
                    break;
                case 
'A2':
                    
$format = array(1190.551683.78);
                    break;
                case 
'A3':
                    
$format = array(841.891190.55);
                    break;
                case 
'A4':
                    
$format = array(595.28841.89);
                    break;
                case 
'A5':
                    
$format = array(419.53595.28);
                    break;
                case 
'A6':
                    
$format = array(297.64419.53);
                    break;
                case 
'A7':
                    
$format = array(209.76297.64);
                    break;
                case 
'A8':
                    
$format = array(147.40209.76);
                    break;
                case 
'A9':
                    
$format = array(104.88147.40);
                    break;
                case 
'A10':
                    
$format = array(73.70104.88);
                    break;
                case 
'B0':
                    
$format = array(2834.654008.19);
                    break;
                case 
'B1':
                    
$format = array(2004.092834.65);
                    break;
                case 
'B2':
                    
$format = array(1417.322004.09);
                    break;
                case 
'B3':
                    
$format = array(1000.631417.32);
                    break;
                case 
'B4':
                    
$format = array(708.661000.63);
                    break;
                case 
'B5':
                    
$format = array(498.90708.66);
                    break;
                case 
'B6':
                    
$format = array(354.33498.90);
                    break;
                case 
'B7':
                    
$format = array(249.45354.33);
                    break;
                case 
'B8':
                    
$format = array(175.75249.45);
                    break;
                case 
'B9':
                    
$format = array(124.72175.75);
                    break;
                case 
'B10':
                    
$format = array(87.87124.72);
                    break;
                case 
'C0':
                    
$format = array(2599.373676.54);
                    break;
                case 
'C1':
                    
$format = array(1836.852599.37);
                    break;
                case 
'C2':
                    
$format = array(1298.271836.85);
                    break;
                case 
'C3':
                    
$format = array(918.431298.27);
                    break;
                case 
'C4':
                    
$format = array(649.13918.43);
                    break;
                case 
'C5':
                    
$format = array(459.21649.13);
                    break;
                case 
'C6':
                    
$format = array(323.15459.21);
                    break;
                case 
'C7':
                    
$format = array(229.61323.15);
                    break;
                case 
'C8':
                    
$format = array(161.57229.61);
                    break;
                case 
'C9':
                    
$format = array(113.39161.57);
                    break;
                case 
'C10':
                    
$format = array(79.37113.39);
                    break;
                case 
'RA0':
                    
$format = array(2437.803458.27);
                    break;
                case 
'RA1':
                    
$format = array(1729.132437.80);
                    break;
                case 
'RA2':
                    
$format = array(1218.901729.13);
                    break;
                case 
'RA3':
                    
$format = array(864.571218.90);
                    break;
                case 
'RA4':
                    
$format = array(609.45864.57);
                    break;
                case 
'SRA0':
                    
$format = array(2551.183628.35);
                    break;
                case 
'SRA1':
                    
$format = array(1814.172551.18);
                    break;
                case 
'SRA2':
                    
$format = array(1275.591814.17);
                    break;
                case 
'SRA3':
                    
$format = array(907.091275.59);
                    break;
                case 
'SRA4':
                    
$format = array(637.80907.09);
                    break;
                case 
'LETTER':
                    
$format = array(612.00792.00);
                    break;
                case 
'LEGAL':
                    
$format = array(612.001008.00);
                    break;
                case 
'EXECUTIVE':
                    
$format = array(521.86756.00);
                    break;
                case 
'FOLIO':
                    
$format = array(612.00936.00);
                    break;
                default:
                    
$this->Error('Unknown page format: ' $format);
                    break;
            } 
// end switch
            
$this->fwPt $format[0];
            
$this->fhPt $format[1];
        }
        else {
            
$this->fwPt $format[0] * $this->k;
            
$this->fhPt $format[1] * $this->k;
        } 
// end if... else...
        
$this->fw       $this->fwPt $this->k;
        
$this->fh       $this->fhPt $this->k;

        
// Page orientation
        
$orientation    strtolower($orientation);
        if (
$orientation == 'p' || $orientation == 'portrait') {
            
$this->DefOrientation 'P';
            
$this->wPt            $this->fwPt;
            
$this->hPt            $this->fhPt;
        }
        else if (
$orientation == 'l' || $orientation == 'landscape') {
            
$this->DefOrientation 'L';
            
$this->wPt            $this->fhPt;
            
$this->hPt            $this->fwPt;
        }
        else {
            
$this->Error('Incorrect orientation: ' $orientation);
        } 
// end if... else if... else...
        
$this->CurOrientation     $this->DefOrientation;
        
$this->w                  $this->wPt $this->k;
        
$this->h                  $this->hPt $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$margin);

        
// Full width display mode
        
$this->SetDisplayMode('fullwidth');

        
// Compression
        
$this->SetCompression(TRUE);
    } 
// end of the "FPDF()" constructor


    /**
     * Sets left margin of the page
     *
     * @param  double  The left margin
     *
     * @access public
     */
    
function SetLeftMargin($margin)
    {
        
$this->lMargin $margin;
        if (
$this->page && $this->$margin) {
            
$this->x   $margin;
        }
    } 
// end of the "SetLeftMargin()" method


    /**
     * Sets top margin of the page
     *
     * @param  double  The top margin
     *
     * @access public
     */
    
function SetTopMargin($margin)
    {
        
$this->tMargin $margin;
    } 
// end of the "SetTopMargin()" method


    /**
     * Sets right margin of the page
     *
     * @param  double  The right margin
     *
     * @access public
     */
    
function SetRightMargin($margin)
    {
        
$this->rMargin $margin;
    } 
// end of the "SetRightMargin()" method


    /**
     * Sets the title of the document (among the document properties)
     *
     * @param  string  The title of the document
     *
     * @access public
     */
    
function SetTitle($title)
    {
        
$this->title $title;
    } 
// end of the "SetTitle()" method


    /**
     * Sets the subject of the document (among the document properties)
     *
     * @param  string  The subject of the document
     *
     * @access public
     */
    
function SetSubject($subject)
    {
        
$this->subject $subject;
    } 
// end of the "SetSubject()" method


    /**
     * Sets the author of the document (among the document properties)
     *
     * @param  string  The author of the document
     *
     * @access public
     */
    
function SetAuthor($author)
    {
        
$this->author $author;
    } 
// end of the "SetAuthor()" method


    /**
     * Sets keywords of the document (among the document properties)
     *
     * @param  string  The keyword list for the document
     *
     * @access public
     */
    
function SetKeywords($keywords)
    {
        
$this->keywords $keywords;
    } 
// end of the "SetKeywords()" method


    /**
     * Sets the creator of the document (among the document properties)
     *
     * @param  string  The creator of the document
     *
     * @access public
     */
    
function SetCreator($creator)
    {
        
$this->creator $creator;
    } 
// end of the "SetCreator()" method


    /**
     * Defines an alias for the total number of pages
     *
     * @param  string  The alias string
     *
     * @access public
     */
    
function AliasNbPages($alias '{nb}')
    {
        
$this->AliasNbPages $alias;
    } 
// end of the "AliasNbPages()" method


    /**
     * Selects a font
     *
     * @param   string   The font name
     * @param   string   The font style (B, I, BI)
     * @param   double   The font size (in points)
     *
     * @global  double   The character width
     *
     * @access  public
     */
    
function SetFont($family$style ''$size 0)
    {
        global 
$fpdf_charwidths;

        
$family     strtolower($family);
        if (
$family == '') {
            
$family $this->FontFamily;
        }
        if (
$family == 'arial') {
            
$family 'helvetica';
        }
        else if (
$family == 'symbol' || $family == 'zapfdingbats') {
            
$style  '';
        }
        
$style      strtoupper($style);

        if (
strpos(' ' $style'U')) {
            
$this->underline TRUE;
            
$style           str_replace('U'''$style);
        } else {
            
$this->underline FALSE;
        }
        if (
$style == 'IB') {
            
$style  'BI';
        }
        if (
$size == 0) {
            
$size   $this->FontSizePt;
        }

        
// Tests if the font is already selected
        
if ($this->FontFamily == $family && $this->FontStyle == $style && $this->FontSizePt == $size) {
            return;
        }

        
// Tests if used for the first time
        
$fontkey $family $style;
        if (!isset(
$this->fonts[$fontkey])) {
            
// Checks if one of the standard fonts
            
if (isset($this->CoreFonts[$fontkey])) {
                if (!isset(
$fpdf_charwidths[$fontkey])) {
                    
// Loads metric file
                    
$file     $family;
                    if (
$family == 'times' || $family == 'helvetica') {
                        
$file .= strtolower($style);
                    }
                    
$file     .= '.php';
                    if (isset(
$GLOBALS['FPDF_font_path'])) {
                        
$file $GLOBALS['FPDF_font_path'] . $file;
                    }
                    include(
$file);
                    if (!isset(
$fpdf_charwidths[$fontkey])) {
                        
$this->Error('Could not include font metric file');
                    }
                } 
// end if
                
$i count($this->fonts) + 1;
                
$this->fonts[$fontkey] = array('i'    => $i,
                                               
'type' => 'core',
                                               
'name' => $this->CoreFonts[$fontkey],
                                               
'up'   => -100,
                                               
'ut'   => 50,
                                               
'cw'   => $fpdf_charwidths[$fontkey]);
            }
            else {
                
$this->Error('Undefined font: ' $family ' ' $style);
            } 
// end if... else...
        
// end if

        // Selects 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));
        }
    } 
// end of the "SetFont()" method


    /**
     * Sends the header of the page
     *
     * This method has to be implemented in your own inherited class
     *
     * @access public
     */
    
function Header()
    {
        
// void
    
// end of the "Header()" method


    /**
     * Sends the footer of the page
     *
     * This method has to be implemented in your own inherited class
     *
     * @access public
     */
    
function Footer()
    {
        
// void
    
// end of the "Footer()" method


    /**
     * Begin the document
     *
     * @access public
     */
    
function Open()
    {
        
$this->_begindoc();
    } 
// end of the "Open()" method


    /**
     * Starts a new page
     *
     * @param  string  The page orientation (p, portrait, l or landscape)
     *
     * @access public
     */
    
function AddPage($orientation '')
    {
        
// Backups some core variables
        
$family             $this->FontFamily;
        
$style              $this->FontStyle . ($this->underline 'U' '');
        
$size               $this->FontSizePt;
        
$lw                 $this->LineWidth;
        
$dc                 $this->DrawColor;
        
$fc                 $this->FillColor;
        
$tc                 $this->TextColor;
        
$cf                 $this->ColorFlag;

        
// If a page is already defined close it before starting the new one
        
if ($this->page 0) {
            
// Page footer
            
$this->InFooter TRUE;
            
$this->Footer();
            
$this->InFooter FALSE;
            
// Close page
            
$this->_endpage();
        }

        
// Do start the new page
        
$this->_beginpage($orientation);
        
// Sets line cap style to square
        
$this->_out('2 J');
        
// Sets line width
        
$this->LineWidth $lw;
        
$this->_out(sprintf('%.2f w'$lw $this->k));
        
// Sets font
        
if ($family) {
            
$this->SetFont($family$style$size);
        }
        
// Sets 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;
        
// Sets Page header
        
$this->Header();
        
// Restores line width
        
if ($this->LineWidth != $lw) {
            
$this->LineWidth $lw;
            
$this->_out(sprintf('%.2f w'$lw $this->k));
        }
        
// Restores font
        
if ($family) {
            
$this->SetFont($family$style$size);
        }
        
// Restores 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;
    } 
// end of the "AddPage()" method


    /**
     * Terminates and closes the document
     *
     * @access public
     */
    
function Close()
    {
        
// Terminates document
        
if ($this->page == 0) {
            
$this->AddPage();
        }

        
// Displays the page footer
        
$this->InFooter TRUE;
        
$this->Footer();
        
$this->InFooter FALSE;

        
// Closes page and document
        
$this->_endpage();
        
$this->_enddoc();
    } 
// end of the "Close()" method


    /**
     * Gets the current page number
     *
     * @return  integer  The current page number
     *
     * @access  public
     */
    
function PageNo()
    {
        return 
$this->page;
    } 
// end of the "PageNo()" method


    /**
     * Sets color for all stroking operations
     *
     * @param  integer  The red level (0 to 255)
     * @param  integer  The green level (0 to 255)
     * @param  integer  The blue level (0 to 255)
     *
     * @access public
     */
    
function SetDrawColor($r$g = -1$b = -1)
    {
        if ((
$r == && $g == && $b == 0) || $g == -1) {
            
$this->DrawColor sprintf('%.3f G'$r 255);
        } else {
            
$this->DrawColor sprintf('%.3f %.3f %.3f RG'$r 255$g 255$b 255);
        } 
// end if... else...

        // If a page is defined, applies this property
        
if ($this->page 0) {
            
$this->_out($this->DrawColor);
        }
    } 
// end of the "SetDrawColor()" method


    /**
     * Sets color for all filling operations
     *
     * @param  integer  The red level (0 to 255)
     * @param  integer  The green level (0 to 255)
     * @param  integer  The blue level (0 to 255)
     *
     * @access public
     */
    
function SetFillColor($r$g = -1$b =-1)
    {
        if ((
$r == && $g == && $b == 0) || $g == -1) {
            
$this->FillColor sprintf('%.3f g'$r 255);
        } else {
            
$this->FillColor sprintf('%.3f %.3f %.3f rg'$r 255$g 255$b 255);
        } 
// end if... else...

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

        
// If a page is defined, applies this property
        
if ($this->page 0) {
            
$this->_out($this->FillColor);
        }
    } 
// end of the "SetDrawColor()" method


    /**
     * Sets color for text
     *
     * @param  integer  The red level (0 to 255)
     * @param  integer  The green level (0 to 255)
     * @param  integer  The blue level (0 to 255)
     *
     * @access public
     */
    
function SetTextColor($r$g = -1$b =-1)
    {
        if ((
$r == && $g == && $b == 0) || $g == -1) {
            
$this->TextColor sprintf('%.3f g'$r 255);
        } else {
            
$this->TextColor sprintf('%.3f %.3f %.3f rg'$r 255$g 255$b 255);
        } 
// end if... else...

        
$this->ColorFlag     = ($this->FillColor != $this->TextColor);
    } 
// end of the "SetTextColor()" method


    /**
     * Sets the line width
     *
     * @param   double  The line width
     *
     * @access  public
     */
    
function SetLineWidth($width)
    {
        
$this->LineWidth $width;

        
// If a page is defined, applies this property
        
if ($this->page 0) {
            
$this->_out(sprintf('%.2f w'$width $this->k));
        }
    } 
// end of the "SetLineWidth()" method


    /**
     * Draws a line
     *
     * @param   double  The horizontal position of the starting point
     * @param   double  The vertical position of the starting point
     * @param   double  The horizontal position of the ending point
     * @param   double  The vertical position of the ending point
     *
     * @access  public
     */
    
function Line($x1$y1$x2$y2)
    {
        
$this->_out(sprintf('%.2f %.2f m %.2f %.2f l S'$x1 $this->k, ($this->$y1) * $this->k$x2 $this->k, ($this->$y2) * $this->k));
    } 
// end of the "Line()" method


    /**
     * Draws a rectangle
     *
     * @param   double  The horizontal position of the top left corner
     * @param   double  The vertical position of the top left corner
     * @param   double  The horizontal position of the bottom right corner
     * @param   double  The vertical position of the bottom right corner
     * @param   string  The rectangle style
     *
     * @access  public
     */
    
function Rect($x$y$w$h$style '')
    {
        if (
$style == 'F') {
            
$op 'f';
        } else if (
$style == 'FD' || $style=='DF') {
            
$op 'B';
        } else {
            
$op 'S';
        } 
// end if... else if... else

        
$this->_out(sprintf('%.2f %.2f %.2f %.2f re %s'$x $this->k, ($this->$y) * $this->k$w $this->k, -$h $this->k$op));
    } 
// end of the "Rect()" method


    /**
     * Adds a TrueType or Type1 font
     *
     * @param   string  The font name
     * @param   string  The font style (B, I, BI)
     * @param   string  The font file definition
     *
     * @access  public
     */
    
function AddFont($family$style ''$file '')
    {
        
$family     strtolower($family);
        if (
$family == 'arial') {
            
$family 'helvetica';
        }

        
$style  strtoupper($style);
        if (
$style == 'IB') {
            
$style 'BI';
        }
        if (isset(
$this->fonts[$family $style])) {
            
$this->Error('Font already added: ' $family ' ' $style);
        }
        if (
$file == '') {
            
$file str_replace(' '''$family) . strtolower($style) . '.php';
        }
        if (isset(
$GLOBALS['FPDF_font_path'])) {
            
$file $GLOBALS['FPDF_font_path'] . $file;
        }
        include(
$file);
        if (!isset(
$name)) {
            
$this->Error('Could not include font definition file');
        }

        
$i count($this->fonts) + 1;
        
$this->fonts[$family $style] = array('i'    => $i,
                                               
'type' => $type,
                                               
'name' => $name,
                                               
'desc' => $desc,
                                               
'up'   => $up,
                                               
'ut'   => $ut,
                                               
'cw'   => $cw,
                                               
'enc'  => $enc,
                                               
'file' => $file);
        
// Searches existing encodings
        
if ($diff) {
            
$d  0;
            
$nb count($this->diffs);
            for (
$i 1$i <= $nb$i++) {
                if (
$this->diffs[$i] == $diff) {
                    
$d $i;
                    break;
                } 
// end if
            
// end for
            
if ($d == 0) {
                
$d               $nb 1;
                
$this->diffs[$d] = $diff;
            } 
// end if
            
$this->fonts[$family $style]['diff'] = $d;
        } 
// end if

        
if ($file) {
            if (
$type == 'TrueType') {
                
$this->FontFiles[$file] = array('length1' => $originalsize);
            } else {
                
$this->FontFiles[$file] = array('length1' => $size1'length2' => $size2);
            }
        } 
// end if
    
// end of the "AddFont()" method


    /**
     * Sets font size
     *
     * @param   double   The font size (in points)
     *
     * @access  public
     */
    
function SetFontSize($size)
    {
        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));
        }
    } 
// end of the "SetFontSize()" method


    /**
     * Creates a new internal link
     *
     * @return  integer  The link id
     *
     * @access  public
     */
    
function AddLink()
    {
        
$n count($this->links) + 1;
        
$this->links[$n] = array(00);
        return 
$n;
    } 
// end of the "AddLink()" method


    /**
     * Sets destination of internal link
     *
     * @param   integer  The link id
     * @param   double   The y position on the page
     * @param   integer  The page number
     *
     * @access  public
     */
    
function SetLink($link$y 0$page = -1)
    {
        if (
$y == -1) {
            
$y    $this->y;
        }
        if (
$page == -1) {
            
$page $this->page;
        }
        
$this->links[$link] = array($page$y);
    } 
// end of the "SetLink()" method


    /**
     * Put a link inside a rectangular area of the page
     *
     * @param   double   The top left x position
     * @param   double   The top left y position
     * @param   double   The rectangle width
     * @param   double   The rectangle height
     * @param   mixed    The link id or an url
     *
     * @access  public
     */
    
function Link($x$y$w$h$link)
    {
        
$this->PageLinks[$this->page][] = array($x $this->k,
                                                
$this->hPt $y $this->k,
                                                
$w $this->k,
                                                
$h $this->k,
                                                
$link);
    } 
// end of the "Link()" method


    /**
     * Outputs a string
     *
     * @param   double  The x position
     * @param   double  The y position
     * @param   string  The string
     *
     * @access  public
     */
    
function Text($x$y$txt)
    {
        
$txt   str_replace(')''\\)'str_replace('(''\\('str_replace('\\''\\\\'$txt)));
        
$s     sprintf('BT %.2f %.2f Td (%s) Tj ET'$x $this->k, ($this->$y) * $this->k$txt);
        if (
$this->underline && $txt != '') {
            
$s .= ' ' $this->_dounderline($x$y$txt);
        }
        if (
$this->ColorFlag) {
            
$s 'q ' $this->TextColor ' ' $s ' Q';
        }
        
$this->_out($s);
    } 
// end of the "Text()" method


    /**
     * Gets whether automatic page break is on or not
     *
     * @return  boolean  Whether automatic page break is on or not
     *
     * @access  public
     */
    
function AcceptPageBreak()
    {
        return 
$this->AutoPageBreak;
    } 
// end of the "AcceptPageBreak()" method


    /**
     * Output a cell
     *
     * @param   double   The cell width
     * @param   double   The cell height
     * @param   string   The text to output
     * @param   mixed    Wether to add borders or not (see the manual)
     * @param   integer  Where to put the cursor once the output is done
     * @param   string   Align mode
     * @param   integer  Whether to fill the cell with a color or not
     * @param   mixed    The link id or an url
     *
     * @access  public
     */
    
function Cell($w$h 0$txt ''$border 0$ln 0$align ''$fill 0$link '')
    {
        
$k $this->k;

        if (
$this->$h $this->PageBreakTrigger
            
&& !$this->InFooter
            
&& $this->AcceptPageBreak()) {
            
$x  $this->x;
            
$ws $this->ws;
            if (
$ws 0) {
                
$this->ws 0;
                
$this->_out('0 Tw');
            }
            
$this->AddPage($this->CurOrientation);
            
$this->$x;
            if (
$ws 0) {
                
$this->ws $ws;
                
$this->_out(sprintf('%.3f Tw'$ws $k));
            }
        } 
// end if

        
if ($w == 0) {
            
$w $this->$this->rMargin $this->x;
        }

        
$s          '';
        if (
$fill == || $border == 1) {
            if (
$fill == 1) {
                
$op = ($border == 1) ? 'B' 'f';
            } else {
                
$op 'S';
            }
            
$s      sprintf('%.2f %.2f %.2f %.2f re %s '$this->$k, ($this->$this->y) * $k$w $k, -$h $k$op);
        } 
// end if

        
if (is_string($border)) {
            
$x     $this->x;
            
$y     $this->y;
            if (
strpos(' ' $border'L')) {
                
$s .= sprintf('%.2f %.2f m %.2f %.2f l S '$x $k, ($this->$y) * $k$x $k, ($this->- ($y+$h)) * $k);
            }
            if (
strpos(' ' $border'T')) {
                
$s .= sprintf('%.2f %.2f m %.2f %.2f l S '$x $k, ($this->$y) * $k, ($x $w) * $k, ($this->$y) * $k);
            }
            if (
strpos(' ' $border'R')) {
                
$s .= sprintf('%.2f %.2f m %.2f %.2f l S ', ($x $w) * $k, ($this->$y) * $k, ($x $w) * $k, ($this->- ($y $h)) * $k);
            }
            if (
strpos(' ' $border'B')) {
                
$s .= sprintf('%.2f %.2f m %.2f %.2f l S '$x $k, ($this->- ($y $h)) * $k, ($x $w) * $k, ($this->- ($y $h)) * $k);
            }
        } 
// end if

        
if ($txt != '') {
            if (
$align == 'R') {
                
$dx $w $this->cMargin $this->GetStringWidth($txt);
            }
            else if (
$align == 'C') {
                
$dx = ($w $this->GetStringWidth($txt)) / 2;
            }
            else {
                
$dx $this->cMargin;
            }
            
$txt    str_replace(')''\\)'str_replace('(''\\('str_replace('\\''\\\\'$txt)));
            if (
$this->ColorFlag) {
                
$s  .= 'q ' $this->TextColor ' ';
            }
            
$s      .= sprintf('BT %.2f %.2f Td (%s) Tj ET', ($this->$dx) * $k, ($this->- ($this->.5 $h .3 $this->FontSize)) * $k$txt);
            if (
$this->underline) {
                
$s  .= ' ' $this->_dounderline($this->x+$dx$this->.5 $h .3 $this->FontSize$txt);
            }
            if (
$this->ColorFlag) {
                
$s  .= ' Q';
            }
            if (
$link) {
                
$this->Link($this->$dx$this->.5 $h .5 $this->FontSize$this->GetStringWidth($txt), $this->FontSize$link);
            }
        } 
// end if

        
if ($s) {
            
$this->_out($s);
        }
        
$this->lasth $h;

        if (
$ln 0) {
            
// Go to next line
            
$this->y     += $h;
            if (
$ln == 1) {
                
$this->$this->lMargin;
            }
        } else {
            
$this->x     += $w;
        }
    } 
// end of the "Cell()" method


    /**
     * Output text with automatic or explicit line breaks
     *
     * @param   double   The cell width
     * @param   double   The cell height
     * @param   string   The text to output
     * @param   mixed    Wether to add borders or not (see the manual)
     * @param   string   Align mode
     * @param   integer  Whether to fill the cell with a color or not
     *
     * @access  public
     */
    
function MultiCell($w$h$txt$border 0$align 'J'$fill 0)
    {
        
// loic1: PHP3 compatibility
        // $cw    = &$this->CurrentFont['cw'];
        
if ($w == 0) {
            
$w $this->$this->lMargin $this->x;
        }
        
$wmax  = ($w $this->cMargin) * 1000 $this->FontSize;
        
$s     str_replace("\r"''$txt);
        
$nb    strlen($s);
        if (
$nb>&& $s[$nb 1] == "\n") {
            
$nb--;
        }

        
$b              0;
        if (
$border) {
            if (
$border == 1) {
                
$border 'LTRB';
                
$b      'LRT';
                
$b2     'LR';
            }
            else {
                
$b2     '';
                if (
strpos(' ' $border'L')) {
                    
$b2 .= 'L';
                }
                if (
strpos(' ' $border'R')) {
                    
$b2 .= 'R';
                }
                
$b      = (strpos(' ' $border'T')) ? $b2 'T' $b2;
            } 
// end if... else...
        
// end if

        
$sep = -1;
        
$i   0;
        
$j   0;
        
$l   0;
        
$ns  0;
        
$nl  1;
        while (
$i $nb) {
            
// Gets next character
            
$c $s[$i];

            
// Explicit line break
            
if ($c == "\n") {
                if (
$this->ws 0) {
                    
$this->ws 0;
                    
$this->_out('0 Tw');
                }
                
$this->Cell($w$hsubstr($s$j$i $j), $b2$align$fill);
                
$i++;
                
$sep   = -1;
                
$j     $i;
                
$l     0;
                
$ns    0;
                
$nl++;
                if (
$border && $nl == 2) {
                    
$b $b2;
                }
                continue;
            } 
// end if

            // Space character
            
if ($c == ' ') {
                
$sep $i;
                
$ls  $l;
                
$ns++;
            } 
// end if

            
$l += $this->CurrentFont['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$hsubstr($s$j$i $j), $b2$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$hsubstr($s$j$sep $j), $b2$align$fill);
                    
$i $sep 1;
                } 
// end if... else...

                
$sep   = -1;
                
$j     $i;
                
$l     0;
                
$ns    0;
                
$nl++;
                if (
$border && $nl == 2) {
                    
$b $b2;
                }
            }
            else {
                
$i++;
            } 
// end if... else
        
// end while

        // Last chunk
        
if ($this->ws 0) {
            
$this->ws 0;
            
$this->_out('0 Tw');
        }

        if (
$border && strpos(' ' $border'B')) {
            
$b .= 'B';
        }
        
$this->Cell($w$hsubstr($s$j$i), $b2$align$fill);
        
$this->$this->lMargin;
    } 
// end of the "MultiCell()" method


    /**
     * Output text in flowing mode
     *
     * @param   double   The line height
     * @param   string   The text to output
     * @param   mixed    The link id or an url
     *
     * @access  public
     */
    
function Write($h$txt$link '')
    {
        
$w    $this->$this->rMargin $this->x;
        
$wmax = ($w $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) {
            
// Gets next character
            
$c $s[$i];

            
// Explicit line break
            
if ($c == "\n") {
                
$this->Cell($w$hsubstr($s$j$i $j), 02''0$link);
                
$i++;
                
$sep = -1;
                
$j   $i;
                
$l   0;
                if (
$nl == 1) {
                    
$this->$this->lMargin;
                    
$w       $this->$this->rMargin $this->x;
                    
$wmax    = ($w $this->cMargin) * 1000 $this->FontSize;
                }
                
$nl++;
                continue;
            }

            
// Space character
            
if ($c == ' ') {
                
$sep $i;
                
$ls  $l;
            } 
// end if

            
$l += $this->CurrentFont['cw'][$c];
            if (
$l $wmax) {
                
// Automatic line break
                
if ($sep == -1) {
                    if(
$this->$this->lMargin)  {
                        
// Move to next line
                        
$this->=$this->lMargin;
                        
$this->+=$h;
                        
$w       $this->$this->rMargin $this->x;
                        
$wmax    =($w $this->cMargin) * 1000 $this->FontSize;
                        
$i++;
                        
$nl++;
                        continue;
                    }
                    if (
$i == $j) {
                        
$i++;
                    }
                    
$this->Cell($w$hsubstr($s$j$i $j), 02''0$link);
                }
                else {
                    
$this->Cell($w$hsubstr($s$j$sep $j), 02''0$link);
                    
$i $sep 1;
                } 
// end if... else...

                
$sep         = -1;
                
$j           $i;
                
$l           0;
                if (
$nl == 1) {
                    
$this->$this->lMargin;
                    
$w       $this->$this->rMargin $this->x;
                    
$wmax    = ($w $this->cMargin) * 1000 $this->FontSize;
                }
                
$nl++;
            }
            else {
                
$i++;
            } 
// end if... else...
        
// end while

        // Last chunk
        
if ($i != $j) {
            
$this->Cell($l 1000 $this->FontSize$hsubstr($s$j$i), 00''0$link);
        }
    } 
// end of the "Write()" method


    /**
     * Puts an image on the page
     *
     * @param   string   The image file (JPEG or PNG format)
     * @param   double   The top left x position
     * @param   double   The top left y position
     * @param   double   The image width
     * @param   double   The image height
     * @param   string   The image type (JPG, JPEG or PNG)
     * @param   mixed    The link id or an url
     *
     * @access  public
     */
    
function Image($file$x$y$w$h 0$type ''$link '')
    {
        if (!isset(
$this->images[$file])) {
            
// First use of 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);
            } 
// end if

            
$type strtolower($type);
            
$mqr  get_magic_quotes_runtime();
            
set_magic_quotes_runtime(0);
            if (
$type == 'jpg' || $type == 'jpeg') {
                
$info $this->_parsejpg($file);
            }
            else if (
$type == 'png') {
                
$info $this->_parsepng($file);
            }
            else {
                
$this->Error('Unsupported image file type: ' $type);
            }
            
set_magic_quotes_runtime($mqr);
            
$info['i']           = count($this->images) + 1;
            
$this->images[$file] = $info;
        }
        else {
            
$info                $this->images[$file];
        } 
// end if... else...

        // Automatic width or height calculation
        
if ($w == 0) {
            
$w $h $info['w'] / $info['h'];
        }
        if (
$h == 0) {
            
$h $w $info['h'] / $info['w'];
        }
        
$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->- ($y $h)) * $this->k$info['i']));

        if (
$link) {
            
$this->Link($x$y$w$h$link);
        }
    } 
// end of the "Image()" method


    /**
     * Appends a line feed
     *
     * @param   double   The line height
     *
     * @access  public
     */
    
function Ln($h '')
    {
        
$this->$this->lMargin;
        
// Sets default line height to last cell height
        
if (is_string($h)) {
            
$this->+= $this->lasth;
        }
        else {
            
$this->+= $h;
        }
    } 
// end of the "Ln()" method


    /**
     * Gets x position
     *
     * @return  double  The x position
     *
     * @access  public
     */
    
function GetX()
    {
        return 
$this->x;
    } 
// end of the "GetX()" method


    /**
     * Sets x position
     *
     * @param   double  The x position
     *
     * @access  public
     */
    
function SetX($x)
    {
        if (
$x >= 0) {
            
$this->$x;
        } else {
            
$this->$this->$x;
        }
    } 
// end of the "SetX()" method


    /**
     * Gets y position
     *
     * @return  double  The y position
     *
     * @access  public
     */
    
function GetY()
    {
        return 
$this->y;
    } 
// end of the "GetY()" method


    /**
     * Sets y position and resets x
     *
     * @param   double  The y position
     *
     * @access  public
     */
    
function SetY($y)
    {
        
$this->$this->lMargin;
        if (
$y >= 0) {
            
$this->$y;
        } else {
            
$this->$this->$y;
        }
    } 
// end of the "SetY()" method


    /**
     * Sets x and y positions
     *
     * @param   double  The x position
     * @param   double  The y position
     *
     * @access  public
     */
    
function SetXY($x,$y)
    {
        
$this->SetY($y);
        
$this->SetX($x);
    } 
// end of the "SetXY()" method


    /**
     * Outputs PDF to file or browser
     *
     * @param   string   The file name
     * @param   boolean  Whether to display the document inside the browser
     *                   (with Acrobat plugin), to enforce download as file or
     *                   to save it on the server
     *
     * @global  string   The browser id string
     *
     * @access  public
     */
    
function Output($file ''$download FALSE)
    {
        global 
$HTTP_USER_AGENT;

        if (
$this->state 3) {
            
$this->Close();
        }

        
// Send to browser
        
if ($file == '') {
            
header('Content-Type: application/pdf');
            if (
headers_sent()) {
                
$this->Error('Some data has already been output to browser, can\'t send PDF file');
            }
            
header('Content-Length: ' strlen($this->buffer));
            
header('Content-Disposition: inline; filename=doc.pdf');
            echo 
$this->buffer;
        }
        
// Download file
        
else if ($download) {
            if (!empty(
$HTTP_USER_AGENT)
                && (
strpos($HTTP_USER_AGENT'MSIE 5.5') || strpos($HTTP_USER_AGENT'Opera'))) {
                
header('Content-Type: application/dummy');
            }
            
// fix for Gecko-based browsers < 1.1
            
else if (!empty($HTTP_USER_AGENT)
                  &&  (
strpos($HTTP_USER_AGENT'Gecko') &&
                  (
strpos($HTTP_USER_AGENT'rv:0.') || strpos($HTTP_USER_AGENT'rv:1.0') || strpos($HTTP_USER_AGENT'rv:1.1')))) {
                     
header('Content-Type: application/');
            }
            else {
                
header('Content-Type: application/pdf');
            }
            if (
headers_sent()) {
                
$this->Error('Some data has already been output to browser, can\'t send PDF file');
            }
            
header('Content-Length: ' strlen($this->buffer));
            
header('Content-Disposition: attachment; filename=' $file);
            echo 
$this->buffer;
        }
        
// Save file locally
        
else {
            
$f fopen($file'wb');
            if (!
$f) {
                
$this->Error('Unable to create output file: ' $file);
            }
            
fwrite($f$this->bufferstrlen($this->buffer));
            
fclose($f);
        } 
// end if... else if... else
    
// end of the "Output()" method

// End of the "FPDF" class



/**
 * Handles silly IE contype request
 */
if (!empty($_ENV) && isset($_ENV['HTTP_USER_AGENT'])) {
    
$HTTP_USER_AGENT $_ENV['HTTP_USER_AGENT'];
}
else if (!empty(
$_SERVER) && isset($_SERVER['HTTP_USER_AGENT'])) {
    
$HTTP_USER_AGENT $_SERVER['HTTP_USER_AGENT'];
}
else if (@
getenv('HTTP_USER_AGENT')) {
    
$HTTP_USER_AGENT getenv('HTTP_USER_AGENT');
}

if (
$HTTP_USER_AGENT == 'contype') {
    
header('Content-Type: application/pdf');
    exit();
}
?>

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #13 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0392 ]--