Criar Web, manuais e recursos para desenvolvimento web
Manuais
Programas
FAQS
Diretório
Comunidade
  Inicio > Manuais > Workshop de PHP
SEÇÕES
Manuais relacionados
+Workshop de PHP
Categorias
+PHP
+Scripts em PHP

Índice do Manual Workshop de PHP
+ Gestão de ficheiros através de PHP
+ Upload de ficheiros com PHP
+ Verificar a existência de uma URL
+ Leitura sequencial de ficheiros com PHP
+ Escritura em ficheiros com PHP
+ Gestão de directórios com PHP
+ Função que escreve um campo select com valores de uma base de dados
+ Receber o último ID de uma inserção com PHP e MySQL
+ Recolher dados de um Select Multiple com PHP
+ Enviar e-mails pelo PHP
+ Validar um endereço email em PHP
+ Loop para receber todas as variáveis por POST em PHP
+ Enviar um formulário por mail com PHP
+ Paginação de resultados com PHP e MySQL
+ Usuários ativos com PHP
+ Listas de elementos com cores alternas em PHP
+ Programas de livre distribuição em PHP
+ phpMyAdmin
+ Formatação de uma cadeia
+ Cálculo dos dias de um mês em PHP
+ Contador simples para páginas PHP
+ Avaliações dos usuários em PHP
+ Rastrear os robôs de buscadores
+ Recomendar um site usando PHP
+ Criação de um log de erros
+ Comprimir página PHP
+ Contador PHP com imagens
+ Editor PHP Maguma Studio
+ SiteMaps de Google em PHP
+ Teste de velocidade de conexão à Internet
+ Mostrar Conteúdo de acordo com o país em PHP
+ Conteúdos em banco de dados com PHP
+ Problemas com as datas em timestamp Unix de PHP
+ Contar o número de linhas e caracteres em arquivo PHP
+ Transformação Doc, Odt ou Rtf para PDF
+ Preencher um arquivo RTF e gerar o PDF
+ Converter arquivos ods ou xls para pdf
+ PHP isam, ferramenta Web para Arquivos Planos
+ Undefined variable ou Undefined index
+ Agregar carinhas ao sistema
+ Paginator, script para paginação com PHP e MySQL
+ Executar scripts PHP automaticamente através do cron com CURL
+ Uso do FTP com PHP
+ Instalação de One or Zero PHP Helpdesk
+ Portal PHP Nuke
+ Gerando feed RSS de notícias em PHP
+ Blasten blt-SEARCH 1.0.5
+ Classes e Objetos em PHP
+ Recuperando a qualidade de uma imagem JPEG
+ Comprovar se existe o domínio do correio
+ Tutorial de BBCode
+ Função em PHP para o cálculo de minutos transcorridos em duas horas dadas
+ Criação de gráficos em PHP com JpGraph
+ Gerar documentos de Word RTF com PHP
+ Introdução ao Symfony
+ Arredondar decimais em PHP
+ Envio de boletins a e-mails de um banco de dados MySQL
+ Htaccess e páginas dinâmicas
+ Criando imagens com PHP
+ Programar um buscador com PHP e MySQL
+ Loop para receber todos os dados de uma fila de um recordset com PHP

Descrição dos capítulos

Parceiros
- CSS para Web Design
- S.O.S Designers
- Slackware-Brasil
- Crie seu Web site
- Oficina da Net


Preencher um arquivo RTF e gerar o PDF

Explicaremos como preencher dinamicamente um arquivo rtf e gerar o seu PDF.


Uma necessidade bastante interessante é de criar arquivos pdf's a partir de arquivos RTF. Nesse artigo explicarei como preencher dinamicamente um arquivo rtf e gerar o seu PDF.

O PHP não possui nenhuma engine para realizar a transformação direta em PDF, para realizar essa conversão estou usando o OpenOffice.org que possui diversas API's que permitem a integração dos seus recursos com diversas linguagens de programação, para mais informações sobre as API's você pode visitar o link: http://udk.openoffice.org/.

O primeiro passo é realizar a instalação do OpenOffice.org, acesse: www.openoffice.org faça o download da última versão do OpenOffice.org, após fazer o download instale o OpenOffice.org, se você quiser basta apenas instalar o Writer. Os outros recursos não iremos usar agora.

Esse script funciona somente em ambiente Windows. Em breve publicarei a solução para ambiente Linux.

Crie um arquivo chamando rtf2pdf.class.php e insira o conteúdo abaixo:

‹?php
/****************************/
/* CLASSE RESPONSÁVEL PELO PREENCHIMENTO DE ARQUIVOS RTF E GERAÇÃO DE PDF */
/* CRIADO EM: 18/05/2007 | 10h22min *****************/
/* AUTOR: Patrick Espake *************************/
/* SITE: www.patrickespake.com ************/
/* E-MAIL: patrickespake@gmail.com ***********************/
/***********************/

class Rtf2Pdf
{
// Atributos.
private $template_file;
private $rtf_file_name;
private $rtf_file;
private $pdf_file_name;
private $pdf_file;
private $dir_files;
private $content_file;
private $vars_and_attributes;

// Métodos sets e gets.
function setTemplateFile($template_file) { $this->template_file = $template_file; }
function getTemplateFile() { return $this->template_file; }

function setRtfFileName($rtf_file_name) { $this->rtf_file_name = $rtf_file_name; }
function getRtfFileName() { return $this->rtf_file_name; }

function setRtfFile($rtf_file) { $this->rtf_file = $rtf_file; }
function getRtfFile() { return $this->rtf_file; }

function setPdfFileName($pdf_file_name) { $this->pdf_file_name = $pdf_file_name; }
function getPdfFileName() { return $this->pdf_file_name; }

function setPdfFile($pdf_file) { $this->pdf_file = $pdf_file; }
function getPdfFile() { return $this->pdf_file; }

function setDirFiles($dir_files) { $this->dir_files = $dir_files; }
function getDirFiles() { return $this->dir_files; }

function setContentFile($content_file) { $this->content_file = $content_file; }
function getContentFile() { return $this->content_file; }

function setVarsAndAttributes($var, $attribute) { $this->vars_and_attributes[] = array($var, $attribute); }
function getVarsAndAttributes() { return $this->vars_and_attributes; }

// Método construtor.
function Rtf2Pdf()
{
// set_time_limit(0) reinicia o contador do limite do tempo de execução do script a partir de zero.
set_time_limit(0);
}

// Método de criação do arquivo pdf.
function makePdf()
{
// Verifica se o arquivo de template existe no diretório.
if(file_exists($this->getDirFiles() . $this->getTemplateFile()))
{
// Abre o arquivo de template e obtém o seu conteúdo.
$fp = fopen($this->getDirFiles() . $this->getTemplateFile(), "r");
$this->setContentFile(fread($fp, filesize($this->getDirFiles() . $this->getTemplateFile())));
fclose($fp);

// $this->makeRtf() cria um arquivo temporário rtf com os dados preenchidos, seguindo o modelo do template. Retorna true.
if($this->makeRtf())
{
// Obtém o nome do arquivo rtf temporário.
$this->setRtfFileName($this->getRtfFile());
// Define os caminhos dos arquivos rtf e pdf.
$rtf_file = "file:///" . $this->getDirFiles() . $this->getRtfFile();
$pdf_file = "file:///" . $this->getDirFiles() . $this->getPdfFileName();
$this->setRtfFile($rtf_file);
$this->setPdfFile($pdf_file);

// Cria o arquivo PDF. Retorna true.
if($this->createPdf())
{
// Apaga o arquivo rtf temporário gerado.
$this->deleteRtfTmp();
// Retona o nome do PDF, o nome do arquivo rtf, diretório dos arquivos e nome do arquivo rtf template.
return array($this->getPdfFileName(), $this->getRtfFileName(), $this->getDirFiles(), $this->getTemplateFile());
}
else
die("Não foi possível geral o arquivo pdf, tente novamente.");
}
}
else
die("O arquivo de template especificado não existe.");
}

// Método de criação do arquivo rtf.
function makeRtf()
{

$contentFile = $this->getContentFile();
$varsAndAtrributes = $this->getVarsAndAttributes();

// Substitui os valores no arquivo de template.
for($i = 0; $i< count($varsAndAtrributes); $i++)
{
$contentFile = str_replace($varsAndAtrributes[$i][0], $varsAndAtrributes[$i][1], $contentFile);
}

// Cria o arquivo rtf temporário com as informações preenchidas, seguindo o modelo do template.
$this->setContentFile($contentFile);
$this->setRtfFile(md5(date("Yms")) . ".rtf");
$fp = fopen($this->getDirFiles() . $this->getRtfFile(), "w+");
fwrite($fp, $this->getContentFile());
fclose($fp);
return true;
}

// Método de criação das propriedades do OpenOffice.org
function makePropertyValue($name, $value, $osm)
{
$oStruct = $osm->Bridge_GetStruct("com.sun.star.beans.PropertyValue");
$oStruct->Name = $name;
$oStruct->Value = $value;
return $oStruct;
}

// Método de transformação do arquivo rtf para arquivo pdf.
function createPdf()
{
// Obtém os caminhos do arquivo rtf e o caminho para criação do arquivo pdf.
$rtf_url = $this->getRtfFile();
$output_url = $this->getPdfFile();

// COM (Component Object Model) estabelece a interação em o PHP e o OpenOffice.org.
$osm = new COM("com.sun.star.ServiceManager") or die("O OpenOffice.org não está instalado.");

// Carrega o OpenOffice.org em modo invisível.
$args = array($this->makePropertyValue("Hidden", true, $osm));

// Carrega o objeto Desktop das API's do OpenOffice.org.
$oDesktop = $osm->createInstance("com.sun.star.frame.Desktop");

// Abre o arquivo rtf temporário no OpenOffice.org.
$oWriterRtf = $oDesktop->loadComponentFromURL($rtf_url, "_blank", 0, $args);

// Transforma o arquivo rtf temporário em PDF.
$export_args = array($this->makePropertyValue("FilterName", "writer_pdf_Export", $osm));

// Grava o arquivo PDF.
$oWriterRtf->storeToURL($output_url,$export_args);

// Fecha o arquivo temporário rtf, mas o OpenOffice.org continua carregado na memória.
$oWriterRtf->close(true);
return true;
}

// Método que apaga o arquivo temporário rtf.
function deleteRtfTmp()
{
if(unlink($this->getDirFiles() . $this->getRtfFileName()))
return true;
else
echo "Não foi possível excluir o arquivo rtf temporário.";
}
}
?›


Crie um arquivo chamando preencher_rtf_gerar_pdf.php e insira o conteúdo abaixo:

‹?php
/*************************/
/* CRIADO EM: 18/05/2007 | 10h49min */
/* AUTOR: Patrick Espake ************/
/* SITE: www.patrickespake.com ******/
/* E-MAIL: patrickespake@gmail.com **/
/***********************/

// Inclui a classe.
include("rtf2pdf.class.php");

// Instância o objeto.
$rtf2pdf = new Rtf2Pdf();

// Define o nome do arquivo de template.
$rtf2pdf->setTemplateFile("template.rtf");

// Define o diretório onde está o template.rtf e onde vai ser gerado o arquivo PDF.
$rtf2pdf->setDirFiles("C:/digite_aqui_o_diretorio_onde_estao_os_arquivos/");

// Onde existir no template.rtf<< data >>,<< nome >>,<< texto >>,<< endereco >>,<< bairro >> e<< cidade >>, será substituido pelo segundo parâmetro valor nas declarações abaixo.
$rtf2pdf->setVarsAndAttributes("<< data >>", "Curitiba, 18 de maio de 2007");
$rtf2pdf->setVarsAndAttributes("<< nome >>", "Patrick Espake");
$rtf2pdf->setVarsAndAttributes("<< texto >>", "O conhecimento é o processo de acumular dados; a sabedoria reside na sua simplificação.");
$rtf2pdf->setVarsAndAttributes("<< endereco >>", "Rua XV de Novembro, 78");
$rtf2pdf->setVarsAndAttributes("<< bairro >>", "Centro");
$rtf2pdf->setVarsAndAttributes("<< cidade >>", "Curitiba");

// Nome do arquivo pdf que vai ser criado.
$rtf2pdf->setPdfFileName("nome_do_meu_arquivo.pdf");

// Preenche o template e cria o PDF com os dados preenchidos. Retona o nome do PDF, o nome do arquivo rtf, diretório dos arquivos e nome do arquivo rtf template.
$rtf2pdf->makePdf();
?›


O arquivo rtf2pdf.class.php é a classe, nesse script estão as funções que preenchem o arquivo rtf e geram o pdf.

O arquivo preencher_rtf_gerar_pdf.php é o script que define o arquivo template, os valores que devem ser substituídos no arquivo template, define o nome do arquivo pdf que irá ser gerado e chama a função que cria o arquivo pdf.

Você deve criar um arquivo de template com o formato rtf, nesse arquivo você deve definir os lugares que virão os dados do php, crie uma espécie de variável no texto, digitando por exemplo:<< nome >>,<< endereco>,<< cidade >> ou qualquer nome que você queira, mas sempre deixando entre os sinais de maior ou menor. Você deve ter percebido que no arquivo preencher_rtf_gerar_pdf.php existe algumas linhas desse tipo: $rtf2pdf->setVarsAndAttributes("<< nome >>", "Patrick Espake"); essa linha diz que onde no arquivo template estiver<< nome >> para substituir por "Patrick Espake", você pode criar quantas variáveis quiser no arquivo de template e depois setar o seu valor no arquivo php.

O script php abre o template rtf e preenche com os dados informados, gerando um arquivo temporário em rtf, a partir desse arquivo temporário é criado o pdf, e por final o arquivo temporário rtf é apagado automaticamente.

Não me preocupei em explicar todo código fonte, pois já deixei tudo bem comentado.

Você pode baixar o arquivo php e um exemplo de template clicando aqui.

Espero que possa ter ajudado.

Autoria e outras referências sobre este artigo

Manuais relacionados com este artigo
Dentro de Workshop de PHP

Categorias relacionadas
Através das categorias do nosso diretório podem ser encontrados outros tipos de recursos relacionados com este artigo:
+ Entrar em PHP
+ Entrar em Scripts em PHP


Comentários dos visitantes
Os comentários dos visitantes são para ampliar a informação do artigo. Todos podem participar.
Acrescentar um comentário do artigo Acrescentar um comentário do artigo



Sobre nós | Copyright | Anuncie | Entrar em contato <criarweb>

Hospedado por Hostnet Hospedagem de Sites