Back-End

23 mar, 2018

Criando apresentações com o PHPPresentation

Publicidade

Fala, pessoal! Hoje, vamos continuar nossa série de artigos sobre as bibliotecas do PHPOffice. E, acho que dessa vez o pessoal do PHPOffice passou dos limites. Sim, nós temos uma biblioteca para escrever .ppt em PHP.

No artigo sobre o PHPWord acabei perguntando se alguém utilizava aquele tipo de biblioteca e, para minha surpresa, várias pessoas me chamaram contando cases legais do porque utilizar o PHPWord. Então, caso você tenha um case legal sobre como utilizar o PHPPresentation, comente aqui no artigo.

Então, vamos parar de enrolação e vamos para o código.

Os pré-requisitos para a instalação do PHPPresentation, são:

Para instalar a biblioteca pelo composer, basta criar uma pasta e chamar através do comando:

composer require phpoffice/phppresentation

Primeiro, vamos criar uma capa para nossa apresentação, nomeando como first.php. Nela, teremos o logo do PokePHP, um título e um rodapé. No caso, o logo do PokePHP está salvo na pasta images, dentro da raiz do projeto com o nome pokephp_logo.png.

<?php

require_once 'vendor/autoload.php'; //autoload do composer

use PhpOffice\PhpPresentation\PhpPresentation; //classe do PhpPresentation
use PhpOffice\PhpPresentation\IOFactory; //classe para manipular os arquivos
use PhpOffice\PhpPresentation\Style\Color; //classe de estilo de cores
use PhpOffice\PhpPresentation\Style\Alignment; //classe de estilo de alinhamentos

$objPHPPowerPoint = new PhpPresentation(); //instanciando uma nova apresentação

$currentSlide = $objPHPPowerPoint->getActiveSlide(); //retornando o slide ativo

$shape = $currentSlide->createDrawingShape(); //criando uma forma de desenho (imagem)
$shape->setName('PokePHP Logo') //definindo o nome da forma
      ->setDescription('PokePHP Logo') //definindo a descrição da forma
      ->setPath('./images/pokephp_logo.png') //definindo o  logo no topo do slide
      ->setHeight(36) //definindo a altura da forma
      ->setOffsetX(10) //definindo as coordenadas do eixo X referente a posição da forma
      ->setOffsetY(10); //definindo as coordenadas do eixo Y referente a posição da forma
$shape->getShadow()->setVisible(true) //definindo uma sombra na imagem
                   ->setDirection(45) //definindo a direção da sombra
                   ->setDistance(10); //definindo a distancia da sombra

$shape = $currentSlide->createRichTextShape() //criando uma forma (texto)
      ->setHeight(300) //definindo a altura da forma
      ->setWidth(600) //definindo a largura da forma
      ->setOffsetX(170) //definindo as coordenadas do eixo X referente a posição da forma
      ->setOffsetY(200); //definindo as coordenadas do eixo Y referente a posição da forma
$shape->getActiveParagraph()->getAlignment()->setHorizontal( Alignment::HORIZONTAL_CENTER ); //definindo o alinhamento do paragrafo
$textRun = $shape->createTextRun('Stand-Up do Pokemãobr!'); //definindo o texto a ser escrito
$textRun->getFont()->setBold(true) //definindo a fonte como negrito
                   ->setSize(60) //definindo o tamanho da fonte
                   ->setColor( new Color( 'FFE06B20' ) ); //definindo a cor da fonte

$shape = $currentSlide->createRichTextShape() //criando uma forma (texto)
      ->setHeight(100) //definindo a altura da forma
      ->setWidth(600) //definindo a largura da forma
      ->setOffsetX(10)//definindo as coordenadas do eixo X referente a posição da forma
      ->setOffsetY(640); //definindo as coordenadas do eixo Y referente a posição da forma
$shape->getActiveParagraph()->getAlignment()->setHorizontal( Alignment::HORIZONTAL_LEFT ); //definindo o alinhamento do paragrafo
$textRun = $shape->createTextRun('@pokemaobr'); //definindo o texto a ser escrito
$textRun->getFont()->setBold(true) //definindo a fonte como negrito
                   ->setSize(20) //definindo o tamanho da fonte
                   ->setColor( new Color( '555555' ) ); //definindo a cor da fonte

$oWriterPPTX = IOFactory::createWriter($objPHPPowerPoint, 'PowerPoint2007'); //definindo o tipo de arquivo como PowerPoint2007
$oWriterPPTX->save(__DIR__ . "/exemplo1.pptx"); //definindo o nome de arquivo de saída
$oWriterODP = IOFactory::createWriter($objPHPPowerPoint, 'ODPresentation'); //definindo o tipo de arquivo como Open Document
$oWriterODP->save(__DIR__ . "/exemplo1.odp"); //definindo o nome de arquivo de saída

O slide ficará mais ou menos assim:

Para criar novos slides, basta utilizar o método $objPHPPowerPoint->createSlide(); No próximo exemplo: second.php iremos criar novas páginas e colocar umas imagens aleatórias:

<?php

require_once 'vendor/autoload.php'; //autoload do composer

use PhpOffice\PhpPresentation\PhpPresentation; //classe do PhpPresentation
use PhpOffice\PhpPresentation\IOFactory; //classe para manipular os arquivos
use PhpOffice\PhpPresentation\Style\Color; //classe de estilo de cores
use PhpOffice\PhpPresentation\Style\Alignment; //classe de estilo de alinhamentos

$objPHPPowerPoint = new PhpPresentation(); //instanciando uma nova apresentação
$currentSlide = $objPHPPowerPoint->getActiveSlide(); //retornando o slide ativo

$shape = $currentSlide->createDrawingShape(); //criando uma forma de desenho (imagem)
$shape->setName('PokePHP Logo') //definindo o nome da forma

      ->setDescription('PokePHP Logo') //definindo a descrição da forma
      ->setPath('./images/pokephp_logo.png') //definindo o  logo no topo do slide
      ->setHeight(36) //definindo a altura da forma
      ->setOffsetX(10) //definindo as coordenadas do eixo X referente a posição da forma
      ->setOffsetY(10); //definindo as coordenadas do eixo Y referente a posição da forma

$shape->getShadow()->setVisible(true) //definindo uma sombra na imagem
                   ->setDirection(45) //definindo a direção da sombra
                   ->setDistance(10); //definindo a distancia da sombra

$shape = $currentSlide->createRichTextShape() //criando uma forma (texto)
      ->setHeight(300) //definindo a altura da forma
      ->setWidth(600) //definindo a largura da forma
      ->setOffsetX(170) //definindo as coordenadas do eixo X referente a posição da forma
      ->setOffsetY(200); //definindo as coordenadas do eixo Y referente a posição da forma
$shape->getActiveParagraph()->getAlignment()->setHorizontal( Alignment::HORIZONTAL_CENTER ); //definindo o alinhamento do paragrafo
$textRun = $shape->createTextRun('Stand-Up do Pokemãobr!'); //definindo o texto a ser escrito
$textRun->getFont()->setBold(true) //definindo a fonte como negrito
                   ->setSize(60) //definindo o tamanho da fonte
                   ->setColor( new Color( 'FFE06B20' ) ); //definindo a cor da fonte

$shape = $currentSlide->createRichTextShape() //criando uma forma (texto)
      ->setHeight(100) //definindo a altura da forma
      ->setWidth(600) //definindo a largura da forma
      ->setOffsetX(10)//definindo as coordenadas do eixo X referente a posição da forma
      ->setOffsetY(640); //definindo as coordenadas do eixo Y referente a posição da forma

$shape->getActiveParagraph()->getAlignment()->setHorizontal( Alignment::HORIZONTAL_LEFT ); //definindo o alinhamento do paragrafo
$textRun = $shape->createTextRun('@pokemaobr'); //definindo o texto a ser escrito
$textRun->getFont()->setBold(true) //definindo a fonte como negrito
                   ->setSize(20) //definindo o tamanho da fonte
                   ->setColor( new Color( '555555' ) ); //definindo a cor da fonte

$currentSlide = $objPHPPowerPoint->createSlide(); //criando um novo slide

$shape = $currentSlide->createDrawingShape(); //criando uma forma de desenho (imagem)
$shape->setName('PokePHP Logo') //definindo o nome da forma
      ->setDescription('PokePHP Logo') //definindo a descrição da forma
      ->setPath('./images/pokephp_logo.png') //definindo o  logo no topo do slide
      ->setHeight(36) //definindo a altura da forma
      ->setOffsetX(10) //definindo as coordenadas do eixo X referente a posição da forma
      ->setOffsetY(10); //definindo as coordenadas do eixo Y referente a posição da forma
$shape->getShadow()->setVisible(true) //definindo uma sombra na imagem
                   ->setDirection(45) //definindo a direção da sombra
                   ->setDistance(10); //definindo a distancia da sombra

// Create a shape (drawing)

$shape = $currentSlide->createDrawingShape(); //criando uma forma de desenho (imagem)
$shape->setName('Por que PHP') //definindo o nome da forma

      ->setDescription('Por que PHP') //definindo a descrição da forma
      ->setPath('./images/porque_php.png') //definindo o  logo no topo do slide
      ->setHeight(500) //definindo a altura da forma
      ->setOffsetX(10) //definindo as coordenadas do eixo X referente a posição da forma
      ->setOffsetY(10); //definindo as coordenadas do eixo Y referente a posição da forma
$shape->getShadow()->setVisible(true) //definindo uma sombra na imagem
                   ->setDirection(45) //definindo a direção da sombra
                   ->setDistance(10); //definindo a distancia da sombra

$shape = $currentSlide->createRichTextShape() //criando uma forma (texto)
      ->setHeight(100) //definindo a altura da forma
      ->setWidth(600) //definindo a largura da forma
      ->setOffsetX(10)//definindo as coordenadas do eixo X referente a posição da forma
      ->setOffsetY(640); //definindo as coordenadas do eixo Y referente a posição da forma
$shape->getActiveParagraph()->getAlignment()->setHorizontal( Alignment::HORIZONTAL_LEFT ); //definindo o alinhamento do paragrafo
$textRun = $shape->createTextRun('@pokemaobr'); //definindo o texto a ser escrito
$textRun->getFont()->setBold(true) //definindo a fonte como negrito
                   ->setSize(20) //definindo o tamanho da fonte
                   ->setColor( new Color( '555555' ) ); //definindo a cor da fonte

$currentSlide = $objPHPPowerPoint->createSlide(); //criando um novo slide

$shape = $currentSlide->createDrawingShape(); //criando uma forma de desenho (imagem)
$shape->setName('PokePHP Logo') //definindo o nome da forma
      ->setDescription('PokePHP Logo') //definindo a descrição da forma
      ->setPath('./images/pokephp_logo.png') //definindo o  logo no topo do slide
      ->setHeight(36) //definindo a altura da forma
      ->setOffsetX(10) //definindo as coordenadas do eixo X referente a posição da forma
      ->setOffsetY(10); //definindo as coordenadas do eixo Y referente a posição da forma

$shape->getShadow()->setVisible(true) //definindo uma sombra na imagem
                   ->setDirection(45) //definindo a direção da sombra
                   ->setDistance(10); //definindo a distancia da sombra


$shape = $currentSlide->createRichTextShape() //criando uma forma (texto)
      ->setHeight(300) //definindo a altura da forma
      ->setWidth(600) //definindo a largura da forma
      ->setOffsetX(170) //definindo as coordenadas do eixo X referente a posição da forma
      ->setOffsetY(200); //definindo as coordenadas do eixo Y referente a posição da forma
$shape->getActiveParagraph()->getAlignment()->setHorizontal( Alignment::HORIZONTAL_CENTER ); //definindo o alinhamento do paragrafo
$textRun = $shape->createTextRun('Obrigado!'); //definindo o texto a ser escrito
$textRun->getFont()->setBold(true) //definindo a fonte como negrito
                   ->setSize(60) //definindo o tamanho da fonte
                   ->setColor( new Color( 'FFE06B20' ) ); //definindo a cor da fonte

$shape = $currentSlide->createRichTextShape() //criando uma forma (texto)
      ->setHeight(100) //definindo a altura da forma
      ->setWidth(600) //definindo a largura da forma
      ->setOffsetX(10)//definindo as coordenadas do eixo X referente a posição da forma
      ->setOffsetY(640); //definindo as coordenadas do eixo Y referente a posição da forma
$shape->getActiveParagraph()->getAlignment()->setHorizontal( Alignment::HORIZONTAL_LEFT ); //definindo o alinhamento do paragrafo
$textRun = $shape->createTextRun('@pokemaobr'); //definindo o texto a ser escrito
$textRun->getFont()->setBold(true) //definindo a fonte como negrito
                   ->setSize(20) //definindo o tamanho da fonte
                   ->setColor( new Color( '555555' ) ); //definindo a cor da fonte

$oWriterPPTX = IOFactory::createWriter($objPHPPowerPoint, 'PowerPoint2007'); //definindo o tipo de arquivo como PowerPoint2007
$oWriterPPTX->save(__DIR__ . "/example2.pptx"); //definindo o nome de arquivo de saída
$oWriterODP = IOFactory::createWriter($objPHPPowerPoint, 'ODPresentation'); //definindo o tipo de arquivo como Open Document
$oWriterODP->save(__DIR__ . "/example2.odp"); //definindo o nome de arquivo de saída

E, rodando o php second.php temos:

Bem, acho que vou utilizar mais esse projeto para criar meus slides. É bem legal poder reaproveitar as imagens, por exemplo, que se repetem, criando apenas um método novo. É bem mais fácil que dar um monte de ctrl+c, ctrl+v nos slides.

Espero que tenham gostado. Até a próxima!