BLOG DE DISEÑO WEB CORUÑA

Un poco de todo, recursos, tutoriales, noticias, anuncios...

Rotar texto en PDF generado con FPDF

14/ENE/2013 14.950 visitas Ver comentarios
Rotar texto en PDF generado con FPDF

ADVERTENCIA: Este artículo tiene más de 6 meses de antigüedad. Puede que esta información ya se encuentre obsoleta o haya nuevas y mejores opciones.

Me surgió el problema de tener que escribir texto con una rotación de 90 grados (simplificando, texto en vertical) en un fichero PDF que se generaba a través de la clase FPDF.

Como el PDF generado no incorporaba imágenes de fondo, sino que los logos y demás eran contenido independiente, no quería hacer un JPG de fondo con el texto en vertical así que googleé un poco (no mucho, la verdad) hasta que encontré una página donde nos regalan una extensión a la clase FPDF que pone tanto textos como imágenes con el ángulo de rotación que nosotros decidamos.

Su uso es excesivamente sencillo, ya que necesita que le digamos el tamaño de la tipografía (únicamente para textos), luego le indiquemos la posición X e Y, el texto o imagen a mostrar y el ángulo de rotación.

Dado por hecho que ya tienes tu script de cómo generar un PDF con la clase FPDF, te dejo los códigos necesarios extraídos de esta web y puedes ver el resultado final en este enlace.

Debo decir que en el caso del texto, el resultado está genial, pero en la imagen, si bien no lo he usado, en el ejemplo dado, la imagen se ve muy distorsionada.

Código 1 - 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();
}
}
Código 2 - PHP
define('FPDF_FONTPATH', 'font/');
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();

Acerca del Autor...

Macadia, es una agencia de Diseño Web Coruña, especializada en maquetación css y desarrollo de páginas web a medida con más de 21 años de experiencia en el desarrollo de páginas web profesionales. Si te ha gustado este artículo, por favor, ayúdanos a difundirlo compartiéndolo con tus amigos y contactos en las distintas redes sociales que utilices. ¡Muchas gracias!

Los comentarios han sido desactivados momentaneamente a la espera de que Disqus adapte su plataforma a la próxima RGPD que entra en vigor desde el 25/05/2018