0

Transformando arquivos ODS ou XLS para PDF

criado por Patrick Espake em 05/08/2007 12:47pm
Esse artigo necessita que o Calc do OpenOffice.org esteja instalando, estou utilizando a versão 2.2 nesse artigo, para fazer o download do OpenOffice.org acesse esse endereço: http://www.openoffice.org

Esse script funciona graças as APIs que o OpenOffice.org possui e esse exemplo funciona apenas em servidores Windows.

Vamos fazer a coisa acontecer, crie um arquivo chamado: xls2pdf.class.php , esse será o arquivo da classe, que realizará toda transformação do arquivo em pdf, adicione o seguinte conteúdo ao arquivo:

<?php
class Xls2Pdf
{
   
// Atributos.
   
private $template_file;
   
private $xls_file_tmp;
   
private $xls_tmp;
   
private $pdf_file_name;
   
private $dir_files;
   
private $value_col_row;

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

   
function getTemplateFile()
   
{
       
return $this->template_file;
   
}

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

   
function getPdfFileName()
   
{
       
return $this->pdf_file_name;
   
}
   
   
function setDirFiles($dir_files)
   
{
        $this
->dir_files = $dir_files;
   
}
   
   
function getDirFiles()
   
{
       
return $this->dir_files;
   
}
   
   
// Método construtor.
   
function Xls2Pdf()
   
{
        set_time_limit
(0);
   
}
   
   
// 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 criação do arquivo pdf.
   
function makePdf()
   
{
       
if (file_exists($this->getDirFiles() . $this->getTemplateFile())) {
           
// Conecta com o OpenOffice.org
            $objServiceManager
= new COM("com.sun.star.ServiceManager")
                   
or die("O OpenOffice.org não está instalado.");
           
// Cria a instância para trabalhar com as API´s do OpenOffice.org
            $objDesktop
= $objServiceManager->createInstance("com.sun.star.frame.Desktop");
           
// Carrega o OpenOffice.org na memória em modo invisível
            $args
= array($this->makePropertyValue("Hidden", true, $objServiceManager));
           
// Carrega o arquivo de template para dentro OpenOffice.org
            $objDocument
= $objDesktop->loadComponentFromURL("file:///" . $this->getDirFiles() .
                    $this
->getTemplateFile(), "_black", 0, $args);
           
// Seleciona a primeira planilha do documento
            $activeSheet
= $objDocument->getSheets->getByIndex(0);
           
// Define o filtro calc_pdf_Export, esse filtro que converte o arquivo template em pdf
            $export_args
= array(
                $this
->makePropertyValue("FilterName", "calc_pdf_Export", $objServiceManager)
           
);
           
// Define o local onde será gravado o arquivo pdf gerado no computador
            $objDocument
->storeToURL("file:///" . $this->getDirFiles() .
                    $this
->getPdfFileName(), $export_args);
           
// Descarrega o OpenOffice.org e fecha a conexão com as API´s
            $objDocument
->dispose();
            $objDocument
->close(true);
           
// Retorna um vetor com o nome do pdf, o diretório dos arquivos e o nome do template
           
return array($this->getPdfFileName(), $this->getDirFiles(), $this->getTemplateFile());
       
} else {
           
// Exibe uma mensagem de erro caso não exista o arquivo
           
die("O arquivo de template especificado não existe.");
       
}
   
}
}
?>

Acabamos de montar o arquivo da classe, agora precisamos criar um arquivo que irá definir o nome do arquivo template, o diretório dos arquivos e o nome do arquivo pdf que você deseja que seja gerado.

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.)