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