Ir para o conteúdo
cgoncalves

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

Mensagens Recomendadas

cgoncalves

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.


"Great coders aren't born. They're compiled and released"

"Expert coders do not need a keyboard. They just throw magnets at the RAM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
elcsat

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
djthyrax

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


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
cgoncalves

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


"Great coders aren't born. They're compiled and released"

"Expert coders do not need a keyboard. They just throw magnets at the RAM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
cgoncalves

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

Força, depois dá um feedback =)

Alguma dúvida apita


"Great coders aren't born. They're compiled and released"

"Expert coders do not need a keyboard. They just throw magnets at the RAM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
elcsat

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
cgoncalves

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


"Great coders aren't born. They're compiled and released"

"Expert coders do not need a keyboard. They just throw magnets at the RAM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
cgoncalves

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

-----ACTUALIZADO-----


"Great coders aren't born. They're compiled and released"

"Expert coders do not need a keyboard. They just throw magnets at the RAM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apoca

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


Tecnologias da Informação e ComunicaçãoUniversidade de Trás-os-Montes e Alto DouroGrupo Linux da UTADAnalista/programador

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.