 |
Downloads > Add-On |
 |
|
 |
| |
|
|
|
|
| |
Transformations
InformationsAuthors: Moritz Wagner & Andreas Würmser License: Freeware
DescriptionPerforms the following 2D transformations: scaling, translation, rotation and skewing.
Use StartTransform() before, and StopTransform() after the transformations to restore the
normal behavior.
StartTransform()
Use this before calling any tranformation.
ScaleX(float s_x [, float x [, float y]])
ScaleY(float s_y [, float x [, float y]])
ScaleXY(float s [, float x [, float y]])
Scale(float s_x, float s_y [, float x [, float y]])
s_x: scaling factor for width as percent. 0 is not allowed.
s_y: scaling factor for height as percent. 0 is not allowed.
s: scaling factor for width and height as percent. 0 is not allowed.
x: abscissa of the scaling center. Default is current x position
y: ordinate of the scaling center. Default is current y position
MirrorH([float x])
Alias for scaling -100% in x-direction
x: abscissa of the axis of reflection
MirrorV([float y])
Alias for scaling -100% in y-direction
y: ordinate of the axis of reflection
TranslateX(float t_x)
TranslateY(float t_y)
Translate(float t_x, float t_y)
t_x: movement to the right
t_y: movement to the bottom
Rotate(float angle [, float x [, float y]])
angle: angle in degrees for counter-clockwise rotation
x: abscissa of the rotation center. Default is current x position
y: ordinate of the rotation center. Default is current y position
SkewX(float angle_x [, float x [, float y]])
SkewY(float angle_y [, float x [, float y]])
Skew(float angle_x, float angle_y [, float x [, float y]])
angle_x: angle in degrees between -90 (skew to the left) and 90 (skew to the right)
angle_y: angle in degrees between -90 (skew to the bottom) and 90 (skew to the top)
x: abscissa of the skewing center. default is current x position
y: ordinate of the skewing center. default is current y position
StopTransform()
restores the normal painting and placing behavior as it was before calling StartTransform().
Source
<?php require('fpdf.php');
class PDF_Transform extends FPDF{
function StartTransform(){ //save the current graphic state $this->_out('q'); }
function ScaleX($s_x, $x='', $y=''){ $this->Scale($s_x, 100, $x, $y); } function ScaleY($s_y, $x='', $y=''){ $this->Scale(100, $s_y, $x, $y); } function ScaleXY($s, $x='', $y=''){ $this->Scale($s, $s, $x, $y); } function Scale($s_x, $s_y, $x='', $y=''){ if($x === '') $x=$this->x; if($y === '') $y=$this->y; if($s_x == 0 || $s_y == 0) $this->Error('Please use values unequal to zero for Scaling'); $y=($this->h-$y)*$this->k; $x*=$this->k; //calculate elements of transformation matrix $s_x/=100; $s_y/=100; $tm[0]=$s_x; $tm[1]=0; $tm[2]=0; $tm[3]=$s_y; $tm[4]=$x*(1-$s_x); $tm[5]=$y*(1-$s_y); //scale the coordinate system $this->Transform($tm); }
function MirrorH($x=''){ $this->Scale(-100, 100, $x); } function MirrorV($y=''){ $this->Scale(100, -100, '', $y); }
function TranslateX($t_x){ $this->Translate($t_x, 0, $x, $y); } function TranslateY($t_y){ $this->Translate(0, $t_y, $x, $y); } function Translate($t_x, $t_y){ //calculate elements of transformation matrix $tm[0]=1; $tm[1]=0; $tm[2]=0; $tm[3]=1; $tm[4]=$t_x; $tm[5]=-$t_y; //translate the coordinate system $this->Transform($tm); }
function Rotate($angle, $x='', $y=''){ if($x === '') $x=$this->x; if($y === '') $y=$this->y; $y=($this->h-$y)*$this->k; $x*=$this->k; //calculate elements of transformation matrix $tm[0]=cos(deg2rad($angle)); $tm[1]=sin(deg2rad($angle)); $tm[2]=-$tm[1]; $tm[3]=$tm[0]; $tm[4]=$x+$tm[1]*$y-$tm[0]*$x; $tm[5]=$y-$tm[0]*$y-$tm[1]*$x; //rotate the coordinate system around ($x, $y) $this->Transform($tm); }
function SkewX($angle_x, $x='', $y=''){ $this->Skew($angle_x, 0, $x, $y); } function SkewY($angle_y, $x='', $y=''){ $this->Skew(0, $angle_y, $x, $y); } function Skew($angle_x, $angle_y, $x='', $y=''){ if($x === '') $x=$this->x; if($y === '') $y=$this->y; if($angle_x <= -90 || $angle_x >= 90 || $angle_y <= -90 || $angle_y >= 90) $this->Error('Please use values between -90° and 90° for skewing'); $x*=$this->k; $y=($this->h-$y)*$this->k; //calculate elements of transformation matrix $tm[0]=1; $tm[1]=tan(deg2rad($angle_y)); $tm[2]=tan(deg2rad($angle_x)); $tm[3]=1; $tm[4]=-$tm[2]*$y; $tm[5]=-$tm[1]*$x; //skew the coordinate system $this->Transform($tm); }
function Transform($tm){ $this->_out(sprintf('%.3f %.3f %.3f %.3f %.3f %.3f cm', $tm[0], $tm[1], $tm[2], $tm[3], $tm[4], $tm[5])); }
function StopTransform(){ //restore previous graphic state $this->_out('Q'); } } ?>
|
Example
<?php require('transform.php');
$pdf = new PDF_Transform(); $pdf->AddPage(); $pdf->SetFont('Arial', '', 12);
//Scaling $pdf->SetDrawColor(200); $pdf->SetTextColor(200); $pdf->Rect(50, 20, 40, 10, 'D'); $pdf->Text(50, 19, 'Scale'); $pdf->SetDrawColor(0); $pdf->SetTextColor(0); //Start Transformation $pdf->StartTransform(); //Scale by 150% centered by (50, 30) which is the lower left corner of the rectangle $pdf->ScaleXY(150, 50, 30); $pdf->Rect(50, 20, 40, 10, 'D'); $pdf->Text(50, 19, 'Scale'); //Stop Transformation $pdf->StopTransform();
//Translation $pdf->SetDrawColor(200); $pdf->SetTextColor(200); $pdf->Rect(125, 20, 40, 10, 'D'); $pdf->Text(125, 19, 'Translate'); $pdf->SetDrawColor(0); $pdf->SetTextColor(0); //Start Transformation $pdf->StartTransform(); //Translate 20 to the right, 15 to the bottom $pdf->Translate(20, 15); $pdf->Rect(125, 20, 40, 10, 'D'); $pdf->Text(125, 19, 'Translate'); //Stop Transformation $pdf->StopTransform();
//Rotation $pdf->SetDrawColor(200); $pdf->SetTextColor(200); $pdf->Rect(50, 50, 40, 10, 'D'); $pdf->Text(50, 49, 'Rotate'); $pdf->SetDrawColor(0); $pdf->SetTextColor(0); //Start Transformation $pdf->StartTransform(); //Rotate 20 degrees counter-clockwise centered by (50, 60) which is the lower left corner of the rectangle $pdf->Rotate(20, 50, 60); $pdf->Rect(50, 50, 40, 10, 'D'); $pdf->Text(50, 49, 'Rotate'); //Stop Transformation $pdf->StopTransform();
//Skewing $pdf->SetDrawColor(200); $pdf->SetTextColor(200); $pdf->Rect(125, 50, 40, 10, 'D'); $pdf->Text(125, 49, 'Skew'); $pdf->SetDrawColor(0); $pdf->SetTextColor(0); //Start Transformation $pdf->StartTransform(); //skew 30 degrees along the x-axis centered by (125, 60) which is the lower left corner of the rectangle $pdf->SkewX(30, 125, 60); $pdf->Rect(125, 50, 40, 10, 'D'); $pdf->Text(125, 49, 'Skew'); //Stop Transformation $pdf->StopTransform();
//Mirroring horizontally $pdf->SetDrawColor(200); $pdf->SetTextColor(200); $pdf->Rect(50, 80, 40, 10, 'D'); $pdf->Text(50, 79, 'MirrorH'); $pdf->SetDrawColor(0); $pdf->SetTextColor(0); //Start Transformation $pdf->StartTransform(); //mirror horizontally with axis of reflection at x-position 50 (left side of the rectangle) $pdf->MirrorH(50); $pdf->Rect(50, 80, 40, 10, 'D'); $pdf->Text(50, 79, 'MirrorH'); //Stop Transformation $pdf->StopTransform();
//Mirroring vertically $pdf->SetDrawColor(200); $pdf->SetTextColor(200); $pdf->Rect(125, 80, 40, 10, 'D'); $pdf->Text(125, 79, 'MirrorV'); $pdf->SetDrawColor(0); $pdf->SetTextColor(0); //Start Transformation $pdf->StartTransform(); //mirror vertically with axis of reflection at y-position 90 (bottom side of the rectangle) $pdf->MirrorV(90); $pdf->Rect(125, 80, 40, 10, 'D'); $pdf->Text(125, 79, 'MirrorV'); //Stop Transformation $pdf->StopTransform();
$pdf->Output(); ?>
|
View the result here.
DownloadZIP | TGZ
| |