Editando um .doc em PHP
Pergunta
Estou tentando substituir strings em um documento do Word lendo o arquivo em uma variável $content
e então usando str_ireplace() para alterar a string.Posso ler o conteúdo do arquivo, mas str_ireplace() parece não ser capaz de substituir a string.Presumi que sim porque a string é 'segura para binário' de acordo com a documentação do PHP.Desculpe, sou iniciante na manipulação de arquivos PHP, então tudo isso é muito novo para mim.
Isto é o que escrevi.
copy('jack.doc' , 'newFile.doc');
$handle = fopen('newFile.doc','rb');
$content = '';
while (!feof($handle))
{
$content .= fread($handle, 1);
}
fclose($handle);
$handle = fopen('newFile.doc','wb');
$content = str_ireplace('USING_ICT_BOX', 'YOUR ICT CONTENT', $content);
fwrite($handle, $content);
fclose($handle);
Quando faço o download do novo arquivo, ele abre como deveria no MS Word mas mostra a string antiga e não aquela que deveria ser substituída.
Posso corrigir esse problema?Existe alguma ferramenta melhor que eu possa usar para substituir strings no MS Word através do PHP?
Solução 4
Vou optar pelo PHPWord www.phpword.codeplex.com porque acredito que os professores receberão o Office 2007 no próximo ano e também tentarei encontrar uma maneira de converter entre .docx e .doc através de PHP para apoiá-los no significa tempo.
Outras dicas
Eu tenho o mesmo requisito para Editar .doc ou .docx arquivo usando php e encontrei uma solução para isso.E eu escrevi uma postagem sobre isso :: http://www.onlinecode.org/update-docx-file-using-php/
copy('jack.doc' , 'newFile.doc');
$full_path = 'newFile.doc';
if($zip_val->open($full_path) == true)
{
// In the Open XML Wordprocessing format content is stored.
// In the document.xml file located in the word directory.
$key_file_name = 'word/document.xml';
$message = $zip_val->getFromName($key_file_name);
$timestamp = date('d-M-Y H:i:s');
// this data Replace the placeholders with actual values
$message = str_replace("client_full_name", "onlinecode org", $message);
$message = str_replace("client_email_address", "ingo@onlinecode.org", $message);
$message = str_replace("date_today", $timestamp, $message);
$message = str_replace("client_website", "www.onlinecode.org", $message);
$message = str_replace("client_mobile_number", "+1999999999", $message);
//Replace the content with the new content created above.
$zip_val->addFromString($key_file_name, $message);
$zip_val->close();
}
Talvez isso indique a direção certa: http://davidwalsh.name/read-pdf-doc-file-php
Soluções que encontrei até agora (embora não testadas):
Documento - funciona para Doc, gratuito, mas não pode ser usado diretamente
PHPWordLib - funciona para Doc, não é grátis
PHPDocX - Apenas DocX, precisa de Zend.
Se você conseguir acessar um serviço da web, consulte Docmose Serviços em nuvem, pois pode mesclar um arquivo doc com seus dados e devolver um doc/pdf/outro.Você pode postar https no serviço para fazer a solicitação, de forma bastante simples no PHP.
Há muitas maneiras de lidar com arquivos de documentos do Word no Linux
antiword
- não é muito eficaz, pois converte em texto simples.pyODconvert
open-office
ouliboffice
- através da ONUunoconv
utilitário - precisa de permissão de instalação no servidor
Existe um script python que é mais útil para conversão de arquivos online, mas você precisa converter esses arquivos por meio da linha de comando.
Não existe uma solução específica e satisfatória para lidar com arquivos do Word usando apenas código php.
Procurei por muito tempo chegar a essa sugestão.