|
|
|
||||||||||||||||||||||
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
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 PDFExplicaremos 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 Dentro deste artigo: + 1 manual relacionado + 2 Categorias relacionadas
Manuais relacionados com este artigo Dentro de Workshop de PHP Seguinte: Converter arquivos ods ou xls para pdf Anterior: Transformação Doc, Odt ou Rtf para PDF 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.
|
| Sobre nós | Copyright | Anuncie | Entrar em contato | <criarweb> |