Ir para conteúdo


- - - - -

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


  • Por favor inicie sessão para responder
9 respostas a este tópico

#1 cgoncalves

cgoncalves

    Boolean User

  • Membro
  • PipPipPip
  • 123 mensagens
  • LocalizaçãoSetúbal

Publicado 29 de Janeiro de 2009 - 14:20

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:

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

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:

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


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:

[php]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";
}[/php]


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:

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

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:

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

Ou podemos ainda percorrer todas as folhas:

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

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:

[php]< ? $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] ;
?>[/php]


Qualquer dúvida apitem.


PS: Aproveito e passo a publicidade  :), ambas as informações podem ser encontradas no meu website.
Imagem Colocada_________________________________[b][color=grey][i]"Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM

#2 elcsat

elcsat

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 456 mensagens

Publicado 29 de Janeiro de 2009 - 23:36

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

#3 djthyrax

djthyrax

    Stack Overflow

  • Moderador
  • PipPipPipPipPipPipPip
  • 14660 mensagens
  • LocalizaçãoTorres Novas / Tomar

Publicado 30 de Janeiro de 2009 - 00:38

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!

#4 cgoncalves

cgoncalves

    Boolean User

  • Membro
  • PipPipPip
  • 123 mensagens
  • LocalizaçãoSetúbal

Publicado 30 de Janeiro de 2009 - 06:52

Ver Mensagemdjthyrax, em 30 de Janeiro de 2009 - 00:38, disse:

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
Imagem Colocada_________________________________[b][color=grey][i]"Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM

#5 elcsat

elcsat

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 456 mensagens

Publicado 30 de Janeiro de 2009 - 12:34

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

#6 cgoncalves

cgoncalves

    Boolean User

  • Membro
  • PipPipPip
  • 123 mensagens
  • LocalizaçãoSetúbal

Publicado 30 de Janeiro de 2009 - 14:44

Ver Mensagemelcsat, em 30 de Janeiro de 2009 - 12:34, disse:

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

Força, depois dá um feedback =)
Alguma dúvida apita
Imagem Colocada_________________________________[b][color=grey][i]"Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM

#7 elcsat

elcsat

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 456 mensagens

Publicado 02 de Fevereiro de 2009 - 00:13

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

#8 cgoncalves

cgoncalves

    Boolean User

  • Membro
  • PipPipPip
  • 123 mensagens
  • LocalizaçãoSetúbal

Publicado 02 de Fevereiro de 2009 - 07:35

Ver Mensagemelcsat, em 02 de Fevereiro de 2009 - 00:13, disse:

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.c...f/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:

Citar

Usa a classe phpExcelReader:

Depois o código para ler é algo como:

[php]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";
}[/php]

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
Imagem Colocada_________________________________[b][color=grey][i]"Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM

#9 cgoncalves

cgoncalves

    Boolean User

  • Membro
  • PipPipPip
  • 123 mensagens
  • LocalizaçãoSetúbal

Publicado 03 de Fevereiro de 2009 - 08:37

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


-----ACTUALIZADO-----
Imagem Colocada_________________________________[b][color=grey][i]"Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM

#10 apoca

apoca

    null

  • Membro
  • Pip
  • 14 mensagens
  • LocalizaçãoAmares (Braga)

Publicado 19 de Outubro de 2009 - 17:38

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