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

Sign in to follow this  
KiNgPiTo

Ler .docs com PHP em Linux

Recommended Posts

KiNgPiTo

Boas...

Tinha um script que lia um bookmark em ficheiros .doc e .docx e substituia pelo valor que lhe desse e guardava o novo documento. O problema é que até agora tinha a correr no localhost, com windows, mas vou alojar agora e tem de ser num server com linux. Eu estava a ler o ficheiro com o COM mas precisa de ter o office instalado e isso não vai ser mais possivel.

Alguma ideia para isto?

Cumprimentos e muito obrigado  :D

Share this post


Link to post
Share on other sites
Knitter

Muda de tecnologia... para .Net.

Infelizmente não há grandes alternativas, para ler XLSX ainda existem bibliotecas, procurar no PEAR se precisares, para docs não conheço nenhuma que permita ler conteúdo correctamente em PHP, pelo menos gratuita.

Se alguém conhecer alguma que funcione também precisava de uma :D

Share this post


Link to post
Share on other sites
M6

Podes tentar usar o OpenOffice através da sua interface de serviço/deamon.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
KiNgPiTo

Já ando desde ontem a ver isto... Fico é limitado a .docx pois os .docs vêm codificados mas já não é mau e estou a ver que é a única solução.

Uma questão: Implementei este código para carregar o document.xml que está no .docx com o conteúdo do documento:

<?php
$zip = new ZipArchive();
$zip->open("gteste.docx");
$docxml = $zip->getFromName("word/document.xml");
$zip->close();

header ("Content-Type:text/xml"); 
echo $docxml;
?>

Ora bem, já estou a carregar o documento e dá-me o xml de um documento apenas com um marcador inserido com o nome "nnoommee" e o valor inicial "NOME":

<w:document>
−
<w:body>
−
<w:p w:rsidR="00407252" w:rsidRPr="00180DD5" w:rsidRDefault="00180DD5" w:rsidP="00180DD5">
−
<w:r>
<w:t xml:space="preserve">Olá </w:t>
</w:r>
<w:bookmarkStart w:id="0" w:name="nnoommee"/>
−
<w:r w:rsidR="00925F74">
<w:t>“NOME”</w:t>
</w:r>
<w:bookmarkEnd w:id="0"/>
−
<w:r w:rsidR="00925F74">
<w:t xml:space="preserve"> ….</w:t>
</w:r>
</w:p>
−
<w:sectPr w:rsidR="00407252" w:rsidRPr="00180DD5" w:rsidSect="003D6260">
<w:pgSz w:w="11906" w:h="16838"/>
<w:pgMar w:top="1417" w:right="1701" w:bottom="1417" w:left="1701" w:header="708" w:footer="708" w:gutter="0"/>
<w:cols w:space="708"/>
<w:docGrid w:linePitch="360"/>
</w:sectPr>
</w:body>
</w:document>

Só que eu nem xml's mais simples ainda sei manipular que fará estas carroças de código...

Alguma sugestão de como alterar o valor e guardar o novo document.xml?

Cumprimentos e muito obrigado

Share this post


Link to post
Share on other sites
KiNgPiTo

Esta foi a solução que fiz para não estar com muito trabalho (um bocado trolha, mas serve para já :) ):

<?php      
$zip = new ZipArchive();
        $zip->open("novoteste.docx"); // Abre o documento antigo
        $docxml = $zip->getFromName("word/document.xml"); //Passa o conteudo do xml para uma variavel
        $zip->close();
               
        $st = str_replace( "var_teste1", "Variavel Teste Inserida", $docxml); //Substitui a variavel pelo valor dado..

copy("novoteste.docx", "novoteste2.docx"); //Copia o conteudo do doc antigo para um novo

$zip2 = new ZipArchive();
$zip2->open("novoteste2.docx"); //Abre o novo

$zip2->addFromString("word/document.xml", $st); //Adiciona o xml substituido ao novo doc
$zip2->close();				
?>

Não ficou a funcionar por bookmarks como pretendia, apenas substitui texto directo...

Se alguém tiver uma sugestão por bookmarks ou outra solução melhor, por favor partilhe ;)

Cumprimentos e Muito Obrigado  ;)

EDIT: Fiz o mesmo para .odt's, o principio é o mesmo, em vez de word/document.xml é content.xml

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.