Tema: generar pdf
Ver Mensaje Individual
  #12 (permalink)  
Antiguo 02/12/2004, 12:16
Avatar de The_omars
The_omars
 
Fecha de Ingreso: marzo-2004
Mensajes: 271
Antigüedad: 20 años, 1 mes
Puntos: 0
Código PHP:
function Cell($w,$h=0,$txt='',$border=0,$ln=0,$align='',$fill=0,$link='')
{
    
//Output a cell
    
$k=$this->k;
    if(
$this->y+$h>$this->PageBreakTrigger and !$this->InFooter and $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->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==or $border==1)
    {
        if(
$fill==1)
            
$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(
is_int(strpos($border,'L')))
            
$s.=sprintf('%.2f %.2f m %.2f %.2f l S ',$x*$k,($this->h-$y)*$k,$x*$k,($this->h-($y+$h))*$k);
        if(
is_int(strpos($border,'T')))
            
$s.=sprintf('%.2f %.2f m %.2f %.2f l S ',$x*$k,($this->h-$y)*$k,($x+$w)*$k,($this->h-$y)*$k);
        if(
is_int(strpos($border,'R')))
            
$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(
is_int(strpos($border,'B')))
            
$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=str_replace(')','\\)',str_replace('(','\\(',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=0)
{
    
//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=str_replace("\r",'',$txt);
    
$nb=strlen($s);
    if(
$nb>and $s[$nb-1]=="\n")
        
$nb--;
    
$b=0;
    if(
$border)
    {
        if(
$border==1)
        {
            
$border='LTRB';
            
$b='LRT';
            
$b2='LR';
        }
        else
        {
            
$b2='';
            if(
is_int(strpos($border,'L')))
                
$b2.='L';
            if(
is_int(strpos($border,'R')))
                
$b2.='R';
            
$b=is_int(strpos($border,'T')) ? $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 and $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 and $nl==2)
                
$b=$b2;
        }
        else
            
$i++;
    }
    
//Last chunk
    
if($this->ws>0)
    {
        
$this->ws=0;
        
$this->_out('0 Tw');
    }
    if(
$border and is_int(strpos($border,'B')))
        
$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 
Image($file,$x,$y,$w=0,$h=0,$type='',$link='')
{
    
//Put an image on the page
    
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);
        }
        
$type=strtolower($type);
        
$mqr=get_magic_quotes_runtime();
        
set_magic_quotes_runtime(0);
        if(
$type=='jpg' or $type=='jpeg')
            
$info=$this->_parsejpg($file);
        elseif(
$type=='png')
            
$info=$this->_parsepng($file);
        elseif(
$type=='gif')                          // Added for GIF Support 
          
$info=$this->_parsegif($file); // Added for GIF Support
        
else
        {
            
//Allow for additional formats
            
$mtd='_parse'.$type;
            if(!
method_exists($this,$mtd))
                
$this->Error('Unsupported image file type: ' $type '<br>File : ' $file); // Better Error Description, by Didier DEBBAUT
              
$info=$this->$mtd($file);
        }
        
set_magic_quotes_runtime($mqr);
        
$info['i']=count($this->images)+1;
        
$this->images[$file]=$info;
    }
    else
        
$info=$this->images[$file];
    
//Automatic width and height calculation if needed
    
if($w==and $h==0)
    {
        
//Put image at 72 dpi
        
$w=$info['w']/$this->k;
        
$h=$info['h']/$this->k;
    }
    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->h-($y+$h))*$this->k,$info['i']));
    if(
$link)
        
$this->Link($x,$y,$w,$h,$link);
}

function 
Ln($h='')
{
    
//Line feed; default value is last cell height
    
$this->x=$this->lMargin;
    if(
is_string($h))
        
$this->y+=$this->lasth;
    else
        
$this->y+=$h;
}

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
    
global $HTTP_SERVER_VARS;

    
//Finish document if necessary
    
if($this->state<3)
        
$this->Close();
    
//Normalize parameters
    
if(is_bool($dest))
        
$dest=$dest 'D' 'F';
    
$dest=strtoupper($dest);
    if(
$dest=='')
    {
        if(
$name=='')
        {
            
$name='doc.pdf';
            
$dest='I';
        }
        else
            
$dest='F';
    }
    switch(
$dest)
    {
        case 
'I':
            
//Send to standard output
            
if(isset($HTTP_SERVER_VARS['SERVER_NAME']))
            {
                
//We send to a browser
                
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='.$name); 
            }
            echo 
$this->buffer;
            break;
        case 
'D':
            
//Download file
            
if(isset($HTTP_SERVER_VARS['HTTP_USER_AGENT']) and strpos($HTTP_SERVER_VARS['HTTP_USER_AGENT'],'MSIE'))
                
Header('Content-Type: application/force-download');
            else
                
Header('Content-Type: application/octet-stream');
            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='.$name);
            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 
'';

**** continua