diff --git a/e107_plugins/pdf/e107pdf.php b/e107_plugins/pdf/e107pdf.php index 732764852..7fa5c1d93 100644 --- a/e107_plugins/pdf/e107pdf.php +++ b/e107_plugins/pdf/e107pdf.php @@ -1,8 +1,13 @@ ", "
", '»', 'º', '·', '™', '©', '€', '[', '[', ' ', '‘', '’', ' />', '(', ')', '{', '}', '[', ']'); $replace = array(" ", "
", "
", '»', 'º', '·', '™', '©', '', '[', '[', ' ', "'", "'", '>', '(', ')', '{', '}', '[',']' ); @@ -231,24 +238,40 @@ class e107PDF extends UFPDF{ $html=str_replace($search, $replace, $html); $a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE); //explodes the string + if (PDF_DEBUG) + { + $admin_log->e_log_event(10,'split_vars',"DEBUG","PDF Trace","Write text: : ".$tp->toHTML('[code]'.$html.'[/code]',TRUE),FALSE,LOG_TO_ROLLING); + $acc = array(); + foreach ($a as $ef) { $acc[] = strlen($ef); } + $admin_log->e_log_event(10,'no_vars',"DEBUG","PDF Trace","Lengths:: ".implode(',',$acc),FALSE,LOG_TO_ROLLING); + } foreach($a as $i=>$e) { + if ($this->temp_counter == 0) + { +// if (PDF_DEBUG) $admin_log->e_log_event(10,'no_vars',"DEBUG","PDF Trace","Process chunk {$i}: ".$e,FALSE,LOG_TO_ROLLING); + } if($i%2==0) { - //Text + //Text between tags if($this->HREF){ $this->PutLink($this->HREF,$e); $this->HREF=''; - }elseif($this->IMG){ + }elseif(0 && $this->IMG){ // This bit shouldn't happen now //correct url if(is_readable($this->SRC)){ - $file = $this->SRC; + $file = trim($this->SRC); $pos=strrpos($file,'.'); $type=substr($file,$pos+1); $type=strtolower($type); //for now only jpg, jpeg and png are supported - if($type=='jpg' || $type=='jpeg' || $type=='png'){ - + if($type=='jpg' || $type=='jpeg' || $type=='png') + { + if ((strpos($file,'http') !== 0) && (strpos($file,'www.') !== 0)) + { // Its a local file - possibly don't need to do anything at all! + $url = $tp->replaceConstants($file); + } +/* Old path-related stuff confused things $url = str_replace("../", "", $this->SRC); $imgsearch = array(e_IMAGE, e_THEME, e_PLUGIN, e_FILE, e_HANDLER); //e_BASE and e_ADMIN are not taken into account ! @@ -258,8 +281,8 @@ class e107PDF extends UFPDF{ if ($l !== false) { $url = SITEURL.$url; } - } - $this->Ln(2); + } */ + $this->Ln(); // Newline with 'default' height to avoid overlaying text $this->PutImage($url,$scale); $this->Ln(2); $this->SetX($this->lMargin); @@ -278,19 +301,25 @@ class e107PDF extends UFPDF{ $this->Cell(0,5,$e,0,1,'R'); }elseif($this->ALIGN == 'left'){ $this->Cell(0,5,$e,0,1,'L'); - }elseif($this->BLOCKQUOTE == 'BLOCKQUOTE'){ + } + elseif($this->BLOCKQUOTE == 'BLOCKQUOTE') + { $this->SetFont('Courier','',11); $this->SetStyle('B',true); $this->SetStyle('I',true); $this->Cell(0,5,$e,1,1,'L'); $this->SetStyle('B',false); $this->SetStyle('I',false); - if ($this->issetcolor==true) { + if ($this->issetcolor==true) + { $this->SetTextColor(0); $this->issetcolor=false; } $this->SetFont($pdfpref['pdf_font_family'],'',$pdfpref['pdf_font_size']); - }else{ + } + else + { + // if (PDF_DEBUG) $admin_log->e_log_event(10,debug_backtrace(),"DEBUG","PDF Trace","Write block {$i}: ".$e,FALSE,LOG_TO_ROLLING); $this->Write(5,stripslashes($this->txtentities($e))); } } @@ -315,11 +344,16 @@ class e107PDF extends UFPDF{ } } - function OpenTag($tag,$attr,$scale){ + function OpenTag($tag,$attr,$scale) + { + global $tp; + global $admin_log; + $tag = strtoupper($tag); //Opening tag - switch($tag){ + switch($tag) + { case 'STRONG': $this->SetStyle('B',true); break; @@ -370,10 +404,36 @@ class e107PDF extends UFPDF{ } break; case 'IMG': + if (PDF_DEBUG) $admin_log->e_log_event(10,debug_backtrace(),"DEBUG","PDF Trace","Image tag found: ".$attr['SRC'],FALSE,LOG_TO_ROLLING); $this->IMG=true; $this->SRC=$attr['SRC']; $this->WIDTH=$attr['WIDTH']; $this->HEIGHT=$attr['HEIGHT']; + // Its a 'closed' tag - so need to process it immediately + + if(is_readable($this->SRC)) + { + $file = trim($this->SRC); + $pos=strrpos($file,'.'); + $type=substr($file,$pos+1); + $type=strtolower($type); + //for now only jpg, jpeg and png are supported + if($type=='jpg' || $type=='jpeg' || $type=='png') + { + if ((strpos($file,'http') !== 0) && (strpos($file,'www.') !== 0)) + { // Its a local file - possibly don't need to do anything at all! + $url = $tp->replaceConstants($file); + } + $this->Ln(); // Newline with 'default' height to avoid overlaying text + $this->PutImage($url,$scale); + $this->Ln(2); + $this->SetX($this->lMargin); + } + } + $this->IMG=''; // Clear the parameters - stops further image-related processing + $this->SRC=''; + $this->WIDTH=''; + $this->HEIGHT=''; break; case 'TR': break; @@ -571,9 +631,13 @@ class e107PDF extends UFPDF{ //(c)2004/03/12 by St@neCold function PutImage($url,$scale) { + global $admin_log; + if (PDF_DEBUG) $admin_log->e_log_event(10,debug_backtrace(),"DEBUG","PDF Trace","Process image {$url}, scale ".$scale,FALSE,LOG_TO_ROLLING); + if($scale<0) $scale=0; //$scale<=0: put NO image inside the pdf! - if($scale>0){ + if($scale>0) + { $xsflag=0; $ysflag=0; $yhflag=0; @@ -582,17 +646,25 @@ class e107PDF extends UFPDF{ //get image info $oposy=$this->GetY(); $iminfo=@getimagesize($url); - if($iminfo){ + if($iminfo) + { + // Width and height of current drawing page + $pw = $this->w - $this->lMargin - $this->rMargin; + $ph = $this->h - $this->tMargin - $this->bMargin; + $iw=$scale * $this->px2mm($iminfo[0]); $ih=$scale * $this->px2mm($iminfo[1]); - $iw = ($iw)?$iw:1; - $ih = ($ih)?$ih:1; - $nw=$iw; - $nh=$ih; + $iw = ($iw)?$iw:1; // Initial width + $ih = ($ih)?$ih:1; // Initial height + $nw=$iw; // New width + $nh=$ih; // New height //resizing in x-direction $xsflag=0; - if($iw>150) { - $xscale=150 / $iw; +// if($iw>150) // Dimensions in mm - so width of portrait A4 + if($iw>$pw) // Dimensions in mm - so width of portrait A4 + { +// $xscale=150 / $iw; + $xscale=$pw / $iw; $yscale=$xscale; $nw=$xscale * $iw; $nh=$xscale * $ih; @@ -600,8 +672,11 @@ class e107PDF extends UFPDF{ } //now eventually resizing in y-direction $ysflag=0; - if(($oposy+$nh)>250){ - $yscale=(250-$oposy)/$ih; +// if(($oposy+$nh)>250) // See if will fit vertically on current page + if(($oposy+$nh)>$ph) // See if will fit vertically on current page + { +// $yscale=(250-$oposy)/$ih; + $yscale=($ph-$oposy)/$ih; $nw=$yscale * $iw; $nh=$yscale * $ih; $ysflag=1; @@ -610,7 +685,8 @@ class e107PDF extends UFPDF{ //remark: without(!) the global factor $scale! //that's hard -> on the next page please... $yhflag=0; - if($yscale<0.33 and ($xsflag==1 or $ysflag==1)) { + if($yscale<0.33 and ($xsflag==1 or $ysflag==1)) + { $nw=$xscale * $iw; $nh=$xscale * $ih; $ysflag==0; @@ -621,7 +697,12 @@ class e107PDF extends UFPDF{ $oposy=$this->GetY(); $this->Image($url, $this->GetX(), $this->GetY(), $nw, $nh); $this->SetY($oposy+$nh); +// if (PDF_DEBUG) $admin_log->e_log_event(10,debug_backtrace(),"DEBUG","PDF Trace","Original Y={$oposy}, Initial height={$ih}, new height={$nh}. Set Y = ".($oposy+$nh)." after image output",FALSE,LOG_TO_ROLLING); + if (PDF_DEBUG) $admin_log->e_log_event(10,debug_backtrace(),"DEBUG","PDF Trace","Page width: {$pw}, Height: {$ph}, Image new width={$nw}, new height={$nh}. Set Y = ".($oposy+$nh)." after image output",FALSE,LOG_TO_ROLLING); +/* +Original Y=76.166666666667, Initial height=119.23888888889, new height=101.4. Set Y = 177.56666666667 after image output */ //if($yhflag==0 and $ysflag==1) $this->AddPage(); + if ($this->temp_counter > 0) $this->temp_counter--; } } } diff --git a/e107_plugins/pdf/ufpdf.php b/e107_plugins/pdf/ufpdf.php index 655bf9f9c..facd71835 100644 --- a/e107_plugins/pdf/ufpdf.php +++ b/e107_plugins/pdf/ufpdf.php @@ -257,10 +257,10 @@ function _dounderline($x,$y,$width,$txt) return sprintf('%.2f %.2f %.2f %.2f re f',$x*$this->k,($this->h-($y-$up/1000*$this->FontSize))*$this->k,$w*$this->k,-$ut/1000*$this->FontSizePt); } -function _textstring($s) +function _textstring($s, $bom = true) { //Convert to UTF-16BE - $s = $this->utf8_to_utf16be($s); + $s = $this->utf8_to_utf16be($s, $bom); //Escape necessary characters $trans = array(')' => '\\)', '(' => '\\(', '\\' => '\\\\'); return '('.strtr($s, $trans).')'; @@ -276,20 +276,21 @@ function _escapetext($s) //return strtr($s, $trans); } + function _putinfo() -{ - $this->_out('/Producer '.$this->_textstring('UFPDF '. UFPDF_VERSION)); +{ // If present, all these fields need to be saved without BOM + $this->_out('/Producer '.$this->_textstring('UFPDF '. UFPDF_VERSION, FALSE)); if(!empty($this->title)) - $this->_out('/Title '.$this->_textstring($this->title)); + $this->_out('/Title '.$this->_textstring($this->title, FALSE)); if(!empty($this->subject)) - $this->_out('/Subject '.$this->_textstring($this->subject)); + $this->_out('/Subject '.$this->_textstring($this->subject, FALSE)); if(!empty($this->author)) - $this->_out('/Author '.$this->_textstring($this->author)); + $this->_out('/Author '.$this->_textstring($this->author, FALSE)); if(!empty($this->keywords)) - $this->_out('/Keywords '.$this->_textstring($this->keywords)); + $this->_out('/Keywords '.$this->_textstring($this->keywords, FALSE)); if(!empty($this->creator)) - $this->_out('/Creator '.$this->_textstring($this->creator)); - $this->_out('/CreationDate '.$this->_textstring('D:'.date('YmdHis'))); + $this->_out('/Creator '.$this->_textstring($this->creator, FALSE)); + $this->_out('/CreationDate '.$this->_textstring('D:'.date('YmdHis'), FALSE)); } // UTF-8 to UTF-16BE conversion.