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:
- PHP 5.3+
- Extensão Zip
- Extensão XML Parser
- Extensão XMLWriter (para escrever DOCX and ODT)
- GD
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!