* @author Andreas Goetz * @license Freeware * @version $Id: fpdf2file.php,v 1.3 2010/04/04 08:51:06 andig2 Exp $ * @version updated for fpdf v1.8 or above copperhead 2022/12/18 * @override for FPDF_VERSION constant added copperhead 2023/01/05 */ //not requied by vidoeDB //require('fpdf.php'); class FPDF2File extends FPDF { protected $f; function Open($file='doc.pdf') { // The FPDF_VERSION constant was replaced by a class constant in FPDF V1.85 // FPDF2FILE extension to lower memory consumption not yet updated @ 2023/01/05 // if(FPDF_VERSION<'1.8') if(self::VERSION<'1.8') $this->Error('Version 1.8 or above is required by this extension'); $this->f=fopen($file,'wb'); if(!$this->f) $this->Error('Unable to create output file: '.$file); $this->_putheader(); } function Image($file, $x=null, $y=null, $w=0, $h=0, $type='', $link='') { if(!isset($this->images[$file])) { //Retrieve only meta-information $a=getimagesize($file); if($a===false) $this->Error('Missing or incorrect image file: '.$file); $this->images[$file]=array('w'=>$a[0],'h'=>$a[1],'type'=>$a[2],'i'=>count($this->images)+1); } parent::Image($file,$x,$y,$w,$h,$type,$link); } function Output($dest='', $name='', $isUTF8=false) { if($this->state<3) $this->Close(); } function _endpage() { parent::_endpage(); //Write page to file $this->_putstreamobject($this->pages[$this->page]); unset($this->pages[$this->page]); } function _getoffset() { return ftell($this->f); } function _put($s) { fwrite($this->f,$s."\n",strlen($s)+1); } function _putimages() { foreach(array_keys($this->images) as $file) { $type=$this->images[$file]['type']; if($type==1) $info=$this->_parsegif($file); elseif($type==2) $info=$this->_parsejpg($file); elseif($type==3) $info=$this->_parsepng($file); else $this->Error('Unsupported image type: '.$file); $this->_putimage($info); $this->images[$file]['n']=$info['n']; unset($info); } } function _putpages() { $nb=$this->page; for($n=1;$n<=$nb;$n++) $this->PageInfo[$n]['n']=$this->n+$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; } //Page objects for($n=1;$n<=$nb;$n++) { $this->_newobj(); $this->_put('<_put('/Parent 1 0 R'); if(isset($this->PageInfo[$n]['size'])) $this->_put(sprintf('/MediaBox [0 0 %.2F %.2F]',$this->PageInfo[$n]['size'][0],$this->PageInfo[$n]['size'][1])); if(isset($this->PageInfo[$n]['rotation'])) $this->_put('/Rotate '.$this->PageInfo[$n]['rotation']); $this->_put('/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.='<_textstring($pl[4]).'>>>>'; else { $l=$this->links[$pl[4]]; if(isset($this->PageInfo[$l[0]]['size'])) $h=$this->PageInfo[$l[0]]['size'][1]; else $h=$hpt; $annots.=sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]>>',$this->PageInfo[$l[0]]['n'],$h-$l[1]*$this->k); } } $this->_put($annots.']'); } if($this->WithAlpha) $this->_put('/Group <>'); $this->_put('/Contents '.(2+$n).' 0 R>>'); $this->_put('endobj'); } //Pages root $this->offsets[1]=$this->_getoffset(); $this->_put('1 0 obj'); $this->_put('<_put($kids.']'); $this->_put('/Count '.$nb); $this->_put(sprintf('/MediaBox [0 0 %.2F %.2F]',$wPt,$hPt)); $this->_put('>>'); $this->_put('endobj'); } function _putheader() { if($this->_getoffset()==0) parent::_putheader(); } function _enddoc() { parent::_enddoc(); fclose($this->f); } } ?>