+1

Preencher um arquivo RTF e gerar o PDF

criado por Patrick Espake em 13/06/2007 10:04am
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.";
   
}
}
?>

Comentários:

Nenhum comentário foi enviado ainda.

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)