# Rotations

## This script allows to perform a rotation around a given center

Author: Olivier

### 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.