Transformando arquivos ODS ou XLS para PDF 26.10.17 19:17
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:
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.
Crie um arquivo chamado: criar_pdf.php, e insira o seguinte conteúdo:
O arquivo criar_pdf.php irá instanciar a classe e passar todos os parâmetros para ela, retornando uma mensagem de sucesso quando o arquivo pdf for gerado. Na primeira execução o script pode demorar um pouco, pois o OpenOffice.org está sendo carregado na memória, nas chamadas seguintes do arquivo criar_pdf.php vai ser mais rápido, pois o OpenOffice.org já irá estar carregado na memória do servidor.
A idéia desse script e você criar um arquivo de template ou qualquer documento e transformar ele em um pdf.
No código existe comentários em cada ponto, que explicam como funciona cada parte do código.
Você pode fazer o download desse script nesse endereço: www.patrickespake.com/pe_scripts/xls2pdf.zip
Espero que esse script facilite a vida de muita gente.
"O conhecimento só pode evoluir quando é compartilhado."
Créditos:
Gerenciamento: Patrick Espake
adaptação e utilização: Hashy
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:
- Código:
<?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.
Crie um arquivo chamado: criar_pdf.php, e insira o seguinte conteúdo:
- Código:
<?php
// Insere o arquivo da classe
include("xls2pdf.class.php");
// Instância a classe
$xls2pdf = new Xls2Pdf();
// Seta o nome do arquivo de template
$xls2pdf->setTemplateFile("exemplo.ods");
// Seta o diretório onde está o arquivo de template
$xls2pdf->setDirFiles("C:/VertrigoServ/www/test/xls/");
// Seta o nome do arquivo pdf que deve ser gerado
$xls2pdf->setPdfFileName("meu_pdf.pdf");
// Converte o arquivo template em pdf
$result = $xls2pdf->makePdf();
// Exibe a mensagem de sucesso
echo $result[0] . " criado com sucesso em " . $result[1] . ".";
?>
O arquivo criar_pdf.php irá instanciar a classe e passar todos os parâmetros para ela, retornando uma mensagem de sucesso quando o arquivo pdf for gerado. Na primeira execução o script pode demorar um pouco, pois o OpenOffice.org está sendo carregado na memória, nas chamadas seguintes do arquivo criar_pdf.php vai ser mais rápido, pois o OpenOffice.org já irá estar carregado na memória do servidor.
A idéia desse script e você criar um arquivo de template ou qualquer documento e transformar ele em um pdf.
No código existe comentários em cada ponto, que explicam como funciona cada parte do código.
Você pode fazer o download desse script nesse endereço: www.patrickespake.com/pe_scripts/xls2pdf.zip
Espero que esse script facilite a vida de muita gente.
"O conhecimento só pode evoluir quando é compartilhado."
Créditos:
Gerenciamento: Patrick Espake
adaptação e utilização: Hashy