Rotations

Add-On Rotations

Informations

Author:Olivier
License: FPDF

Description

This script allows to perform a rotation around a given center.
The method to set a rotation is:

Rotate(float angle [, float x [, float y]])

angle: angle in degrees.
x: abscissa of the rotation center. Default value: current position.
y: ordinate of the rotation center. Default value: current position.

The rotation affects all elements which are printed after the method call (with the exception of clickable areas).

Remarks:

- Only the display is altered. The GetX() and GetY() methods are not affected, nor the automatic page break mechanism.
- Rotation is not kept from page to page. Each page begins with a null rotation.

Source

<?php
require('fpdf.php');

class PDF_Rotate extends FPDF
{
var $angle=0;

function Rotate($angle, $x=-1, $y=-1)
{
    if($x==-1)
        $x=$this->x;
    if($y==-1)
        $y=$this->y;
    if($this->angle!=0)
        $this->_out('Q');
    $this->angle=$angle;
    if($angle!=0)
    {
        $angle*=M_PI/180;
        $c=cos($angle);
        $s=sin($angle);
        $cx=$x*$this->k;
        $cy=($this->h-$y)*$this->k;
        $this->_out(sprintf('q %.5F %.5F %.5F %.5F %.2F %.2F cm 1 0 0 1 %.2F %.2F cm', $c, $s, -$s, $c, $cx, $cy, -$cx, -$cy));
    }
}

function _endpage()
{
    if($this->angle!=0)
    {
        $this->angle=0;
        $this->_out('Q');
    }
    parent::_endpage();
}
}
?>

Example

Here's an example which defines the utility methods RotatedText() and RotatedImage() and uses them to print a text and an image rotated to 45°.
<?php
require('rotation.php');

class PDF extends PDF_Rotate
{
function RotatedText($x, $y, $txt, $angle)
{
    //Text rotated around its origin
    $this->Rotate($angle, $x, $y);
    $this->Text($x, $y, $txt);
    $this->Rotate(0);
}

function RotatedImage($file, $x, $y, $w, $h, $angle)
{
    //Image rotated around its upper-left corner
    $this->Rotate($angle, $x, $y);
    $this->Image($file, $x, $y, $w, $h);
    $this->Rotate(0);
}
}

$pdf=new PDF();
$pdf->AddPage();
$pdf->SetFont('Arial', '', 20);
$pdf->RotatedImage('circle.png', 85, 60, 40, 16, 45);
$pdf->RotatedText(100, 60, 'Hello!', 45);
$pdf->Output();
?>
View the result here.

Download

ZIP | TGZ