?? fpdf.php
字號:
}
break;
default: break;
}
// move on to the next line, reset variables, tack on saved content and current char
$this->restoreFont( $savedFont );
$font = array( $savedFont );
$content = array( $savedContent . $s{ $i } );
$currContent =& $content[ 0 ];
$contentWidth = $this->GetStringWidth( $currContent ) * $this->k;
$cutoffWidth = $contentWidth;
}
// another character will fit, so add it on
else
{
$contentWidth += $cw;
$currContent .= $s{ $i };
}
}
}
//----------------------END OF FLOWING BLOCK------------------------------------//
//EDITEI
//Thanks to Ron Korving for the WordWrap() function
function WordWrap(&$text, $maxwidth)
{
$biggestword=0;//EDITEI
$toonarrow=false;//EDITEI
$text = trim($text);
if ($text==='') return 0;
$space = $this->GetStringWidth(' ');
$lines = explode("\n", $text);
$text = '';
$count = 0;
foreach ($lines as $line)
{
$words = preg_split('/ +/', $line);
$width = 0;
foreach ($words as $word)
{
$wordwidth = $this->GetStringWidth($word);
//EDITEI
//Warn user that maxwidth is insufficient
if ($wordwidth > $maxwidth)
{
if ($wordwidth > $biggestword) $biggestword = $wordwidth;
$toonarrow=true;//EDITEI
}
if ($width + $wordwidth <= $maxwidth)
{
$width += $wordwidth + $space;
$text .= $word.' ';
}
else
{
$width = $wordwidth + $space;
$text = rtrim($text)."\n".$word.' ';
$count++;
}
}
$text = rtrim($text)."\n";
$count++;
}
$text = rtrim($text);
//Return -(wordsize) if word is bigger than maxwidth
if ($toonarrow) return -$biggestword;
else return $count;
}
//EDITEI
//Thanks to Seb(captainseb@wanadoo.fr) for the _SetTextRendering() and SetTextOutline() functions
/**
* Set Text Rendering Mode
* @param int $mode Set the rendering mode.<ul><li>0 : Fill text (default)</li><li>1 : Stroke</li><li>2 : Fill & stroke</li></ul>
* @see SetTextOutline()
*/
//This function is not being currently used
function _SetTextRendering($mode) {
if (!(($mode == 0) || ($mode == 1) || ($mode == 2)))
$this->Error("Text rendering mode should be 0, 1 or 2 (value : $mode)");
$this->_out($mode.' Tr');
}
/**
* Set Text Ouline On/Off
* @param mixed $width If set to false the text rending mode is set to fill, else it's the width of the outline
* @param int $r If g et b are given, red component; if not, indicates the gray level. Value between 0 and 255
* @param int $g Green component (between 0 and 255)
* @param int $b Blue component (between 0 and 255)
* @see _SetTextRendering()
*/
function SetTextOutline($width, $r=0, $g=-1, $b=-1) //EDITEI
{
if ($width == false) //Now resets all values
{
$this->outline_on = false;
$this->SetLineWidth(0.2);
$this->SetDrawColor(0);
$this->_setTextRendering(0);
$this->_out('0 Tr');
}
else
{
$this->SetLineWidth($width);
$this->SetDrawColor($r, $g , $b);
$this->_out('2 Tr'); //Fixed
}
}
//function Circle() thanks to Olivier PLATHEY
//EDITEI
function Circle($x,$y,$r,$style='')
{
$this->Ellipse($x,$y,$r,$r,$style);
}
//function Ellipse() thanks to Olivier PLATHEY
//EDITEI
function Ellipse($x,$y,$rx,$ry,$style='D')
{
if($style=='F') $op='f';
elseif($style=='FD' or $style=='DF') $op='B';
else $op='S';
$lx=4/3*(M_SQRT2-1)*$rx;
$ly=4/3*(M_SQRT2-1)*$ry;
$k=$this->k;
$h=$this->h;
$this->_out(sprintf('%.2f %.2f m %.2f %.2f %.2f %.2f %.2f %.2f c',
($x+$rx)*$k,($h-$y)*$k,
($x+$rx)*$k,($h-($y-$ly))*$k,
($x+$lx)*$k,($h-($y-$ry))*$k,
$x*$k,($h-($y-$ry))*$k));
$this->_out(sprintf('%.2f %.2f %.2f %.2f %.2f %.2f c',
($x-$lx)*$k,($h-($y-$ry))*$k,
($x-$rx)*$k,($h-($y-$ly))*$k,
($x-$rx)*$k,($h-$y)*$k));
$this->_out(sprintf('%.2f %.2f %.2f %.2f %.2f %.2f c',
($x-$rx)*$k,($h-($y+$ly))*$k,
($x-$lx)*$k,($h-($y+$ry))*$k,
$x*$k,($h-($y+$ry))*$k));
$this->_out(sprintf('%.2f %.2f %.2f %.2f %.2f %.2f c %s',
($x+$lx)*$k,($h-($y+$ry))*$k,
($x+$rx)*$k,($h-($y+$ly))*$k,
($x+$rx)*$k,($h-$y)*$k,
$op));
}
function Image($file,$x,$y,$w=0,$h=0,$type='',$link='',$paint=true)
{
//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') $info=$this->_parsegif($file); //EDITEI - GIF format included
else
{
//Allow for additional formats
$mtd='_parse'.$type;
if(!method_exists($this,$mtd)) $this->Error('Unsupported image type: '.$type);
$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==0 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'];
$changedpage = false; //EDITEI
//Avoid drawing out of the paper(exceeding width limits). //EDITEI
if ( ($x + $w) > $this->fw )
{
$x = $this->lMargin;
$y += 5;
}
//Avoid drawing out of the page. //EDITEI
if ( ($y + $h) > $this->fh )
{
$this->AddPage();
$y = $tMargin + 10; // +10 to avoid drawing too close to border of page
$changedpage = true;
}
$outstring = 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($paint) //EDITEI
{
$this->_out($outstring);
if($link) $this->Link($x,$y,$w,$h,$link);
}
//Avoid writing text on top of the image. //EDITEI
if ($changedpage) $this->y = $y + $h;
else $this->y = $y + $h;
//Return width-height array //EDITEI
$sizesarray['WIDTH'] = $w;
$sizesarray['HEIGHT'] = $h;
$sizesarray['X'] = $x; //Position before painting image
$sizesarray['Y'] = $y; //Position before painting image
$sizesarray['OUTPUT'] = $outstring;
return $sizesarray;
}
//EDITEI - Done after reading a little about PDF reference guide
function DottedRect($x=100,$y=150,$w=50,$h=50)
{
$x *= $this->k ;
$y = ($this->h-$y)*$this->k;
$w *= $this->k ;
$h *= $this->k ;// - h?
$herex = $x;
$herey = $y;
//Make fillcolor == drawcolor
$bak_fill = $this->FillColor;
$this->FillColor = $this->DrawColor;
$this->FillColor = str_replace('RG','rg',$this->FillColor);
$this->_out($this->FillColor);
while ($herex < ($x + $w)) //draw from upper left to upper right
{
$this->DrawDot($herex,$herey);
$herex += (3*$this->k);
}
$herex = $x + $w;
while ($herey > ($y - $h)) //draw from upper right to lower right
{
$this->DrawDot($herex,$herey);
$herey -= (3*$this->k);
}
$herey = $y - $h;
while ($herex > $x) //draw from lower right to lower left
{
$this->DrawDot($herex,$herey);
$herex -= (3*$this->k);
}
$herex = $x;
while ($herey < $y) //draw from lower left to upper left
{
$this->DrawDot($herex,$herey);
$herey += (3*$this->k);
}
$herey = $y;
$this->FillColor = $bak_fill;
$this->_out($this->FillColor); //return fillcolor back to normal
}
//EDITEI - Done after reading a little about PDF reference guide
function DrawDot($x,$y) //center x y
{
$op = 'B'; // draw Filled Dots
//F == fill //S == stroke //B == stroke and fill
$r = 0.5 * $this->k; //raio
//Start Point
$x1 = $x - $r;
$y1 = $y;
//End Point
$x2 = $x + $r;
$y2 = $y;
//Auxiliar Point
$x3 = $x;
$y3 = $y + (2*$r);// 2*raio to make a round (not oval) shape
//Round join and cap
$s="\n".'1 J'."\n";
$s.='1 j'."\n";
//Upper circle
$s.=sprintf('%.3f %.3f m'."\n",$x1,$y1); //x y start drawing
$s.=sprintf('%.3f %.3f %.3f %.3f %.3f %.3f c'."\n",$x1,$y1,$x3,$y3,$x2,$y2);//Bezier curve
//Lower circle
$y3 = $y - (2*$r);
$s.=sprintf("\n".'%.3f %.3f m'."\n",$x1,$y1); //x y start drawing
$s.=sprintf('%.3f %.3f %.3f %.3f %.3f %.3f c'."\n",$x1,$y1,$x3,$y3,$x2,$y2);
$s.=$op."\n"; //stroke and fill
//Draw in PDF file
$this->_out($s);
}
function SetDash($black=false,$white=false)
{
if($black and $white) $s=sprintf('[%.3f %.3f] 0 d',$black*$this->k,$white*$this->k);
else $s='[] 0 d';
$this->_out($s);
}
function Bookmark($txt,$level=0,$y=0)
{
if($y == -1) $y = $this->GetY();
$this->outlines[]=array('t'=>$txt,'l'=>$level,'y'=>$y,'p'=>$this->PageNo());
}
function DisplayPreferences($preferences)
{
$this->DisplayPreferences .= $preferences;
}
function _putbookmarks()
{
$nb=count($this->outlines);
if($nb==0) return;
$lru=array();
$level=0;
foreach($this->outlines as $i=>$o)
{
if($o['l']>0)
{
$parent=$lru[$o['l']-1];
//Set parent and last pointers
$this->outlines[$i]['parent']=$parent;
$this->outlines[$parent]['last']=$i;
if($o['l']>$level)
{
//Level increasing: set first pointer
}
}
else
$this->outlines[$i]['parent']=$nb;
if($o['l']<=$level and $i>0)
{
//Set prev and next pointers
$prev=$lru[$o['l']];
$this->outlines[$prev]['next']=$i;
$this->outlines[$i]['prev']=$prev;
}
$lru[$o['l']]=$i;
$level=$o['l'];
}
//Outline items
$n=$this->n+1;
foreach($this->outlines as $i=>$o)
{
$this->_newobj();
$this->_out('<</Title '.$this->_textstring($o['t']));
$this->_out('/Parent '.($n+$o['parent']).' 0 R');
if(isset($o['prev']))
$this->_out('/Prev '.($n+$o['prev']).' 0 R');
if(isset($o['next']))
$this->_out('/Next '.($n+$o['next']).' 0 R');
if(isset($o['first']))
$this->_out('/First '.($n+$o['first']).' 0 R');
if(isset($o['last']))
$this->_out('/Last '.($n+$o['last']).' 0 R');
$this->_out(sprintf('/Dest [%d 0 R /XYZ 0 %.2f null]',1+2*$o['p'],($this->h-$o['y'])*$this->k));
$this->_out('/Count 0>>');
$this->_out('endobj');
}
//Outline root
$this->_newobj();
$this->OutlineRoot=$this->n;
$this->_out('<</Type /Outlines /First '.$n.' 0 R');
$this->_out('/Last '.($n+$lru[0]).' 0 R>>');
$this->_out('endobj');
}
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)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -