# Rotations

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.

ZIP | TGZ