• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

cgoncalves

[PHP] Ler PDF's, Word e Excel com PHP

10 mensagens neste tópico

Uns tempos atrás precisei de ler o texto em PDF's e .DOC's (Word), esta foi a solução que achei e resolvi partilhar.

Ler Ficheiros PDF

Para que seja possível a leitura de PDF’s, primeiramente precisas de instalar o xpdf package, que inclui “pdftotext.” Depois de termos xpdf/pdftotext instalado, executamos a seguinte instrucção PHP para obter o texto do PDF:

$content = shell_exec('/usr/local/bin/pdftotext '.$filename.' -');

Ler Ficheiros Word (.doc)

Ainda como o exemplo acima dos PDF’s, precisas de instalar outro pacote. Pacote esse denominado Antiword.

Esta é a linha que obtém o conteúdo do Documento Word:

$content = shell_exec('/usr/local/bin/antiword '.$filename);

De frisar que o código acima não lê ficheiros .DOCX (Office 2007) e não (propositadamente) preserva o formato.

Existem outras bibliotecas que preservam a formatação, mas no meu caso, o objectivo era so mesmo obter o texto.

Ler Ficheiros Excel (.xls)

Quanto ao do excel, e bem como os exemplos anteriores, será necessário recorrermos a uma classe, classe essa: phpExcelReader

Depois o código para ler é algo como:

require_once 'Excel/reader.php';

$reader = new Spreadsheet_Excel_Reader();
$reader->setOutputEncoding("UTF-8");

$reader->read("test.xls");

for ($i = 1; $i <= $reader->sheets[0]["numRows"]; $i++)
{
for ($j = 1; $j <= $reader->sheets[0]["numCols"]; $j++)
{
	print "\"".$reader->sheets[0]["cells"][$i][$j]."\",";
}
echo "\n";
}

Se bem que a leitura do excel é um pouco mais complexa, dá mais trabalho que os outros dois.

Uma outra solução para o Excel e questões de performance aparte, esta é uma solução simples, basta trocar o PDO por um classe de leitura do excel e adaptar-mos. Considerando que tornamos a aplicação apenas para leitura.

Fica aqui o link OLEREAD para fazerem o download.

Para iniciar a leitura do excel fazemos:

< ?
include 'oleread.php' ;
$file = "ficheiro.xls" ;
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('CP1251');
$data->read($file);
?>

Com isto, a estrutura da folha XLS será carregada no Objecto $data. Para acedermos a uma folha precisamos aceder à propriedade “sheets”, um array com todas as folhas do ficheiro (cada “aba” na parte de baixo do excel) pelo número da ordem em que se encontram começando do 0. Exemplo de como obtemos a primeira folha do ficheiro excel:

< ? $first = $data->sheets[0] ; ?>

Ou podemos ainda percorrer todas as folhas:

< ? foreach($data->sheets as $sheet) { // código aqui } ?>

Cada folha (sheet) possui uma propriedade chamada ‘cells’, que é um array multidimensional com todas as células da folha, até aonde foi preenchida. O primeiro índice do array é a linha, o segundo a coluna. Eis um exemplo:

< ? $cells = $data->sheets[0]['cells'] ;
echo "nTitulo da Folha (linha 1, coluna A):". $cells[1][1] ;
echo "nSubtitulo (linha 2, coluna C):".$cells[2][3] ;
?>

Qualquer dúvida apitem.

PS: Aproveito e passo a publicidade  :), ambas as informações podem ser encontradas no meu website.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

desculpa mas os links que colocaste em cima aponta para paginas que nao existem, seria que os podias disponibilizar, para quem quisar sacar, eu ate gostava de testar isso:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agora já funcionam, ele usou mal a tag [ url].

Thanks, usei na tag as " " ... já é força de hábito lool

EDIT: Actualizado, informação adicional

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

obrigada, ja vou sacar para testar. :):thumbsup: :thumbsup: :P :biggrin:

Força, depois dá um feedback =)

Alguma dúvida apita

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

do pdf nao conseguir so o antiword que e para usar o word, e excel ja agora tens alguma coisa pra passar as tabelas de excel:), e podes fornecer o link para sacar o do pdf, desde ja brigada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

do pdf nao conseguir so o antiword que e para usar o word, e excel ja agora tens alguma coisa pra passar as tabelas de excel:), e podes fornecer o link para sacar o do pdf, desde ja brigada

Quanto ao link do PDF está no primeiro post, mas o link é: http://www.foolabs.com/xpdf/download.html

Quanto ao do excel, por acaso, ainda ontem um user fez-me a mesma pergunta sobre, se bem que foi noutro fórum.

Vou fazer copiar a mesma resposta:

Usa a classe phpExcelReader:

Depois o código para ler é algo como:

require_once 'Excel/reader.php';

$reader = new Spreadsheet_Excel_Reader();
$reader->setOutputEncoding("UTF-8");

$reader->read("test.xls");

for ($i = 1; $i <= $reader->sheets[0]["numRows"]; $i++)
{
   for ($j = 1; $j <= $reader->sheets[0]["numCols"]; $j++)
   {
      print "\"".$reader->sheets[0]["cells"][$i][$j]."\",";
   }
   echo "\n";
}

Se bem que a do excel é um pouco mais complexo, dá mais trabalho que esses dois.

Alguma dúvida apita.

******EDIT*******

Informação adicionada ao post inicial

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Coloquei no meu Blog nova informação de como ler o excel com php, já venho actualizar isto  :P

-----ACTUALIZADO-----

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom não me sabem dizer como posso fazer algo parecido!? Ou seja, os docs e xls estão no servidor eu autentico-me (isto tudo na web através de um site web), altero o doc por exemplo e volto a guardar e ele fica no servidor.... Não me sabem dizer como posso fazer algo do género.. Ou seja, sem o utilizador ter de fazer download pro pc alterar e voltar a fazer upload...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora