Como usar o PHP para incluir uma imagem em um arquivo do Word?
-
27-09-2019 - |
Pergunta
Alguém me pediu para fazer um aplicativo no PHP que gerará um arquivo .doc com uma imagem e algumas tabelas. Minha primeira abordagem foi:
<?php
function data_uri($file, $mime)
{
$contents = file_get_contents($file);
$base64 = base64_encode($contents);
return ('data:' . $mime . ';base64,' . $base64);
}
$file = 'new.doc';
$fh = fopen($file,'w');
$uri = data_uri('pic.png','image/png');
fwrite($fh,'<table border="1"><tr><td><b>something</b></td><td>something else</td></tr><tr><td></td><td></td></tr></table>
<br/><img src="'.$uri.'" alt="some text" />
<br/>
<table border="1"><tr><td><b>ceva</b></td><td>altceva</td></tr><tr><td></td><td></td></tr></table>');
fclose($fh);
?>
Isso usa a técnica de URI de dados para incorporar uma imagem.
Isso gerará um arquivo HTML que será renderizado OK nos navegadores da Web, mas a imagem está ausente no Microsoft Office Word, pelo menos na configuração padrão. Em seguida, ao editar o arquivo com o Word, substituo a imagem por uma imagem do arquivo e o Microsoft Word alterou o conteúdo do arquivo em XML aberto e adicionou uma pasta, new_files, onde ele colocou a imagem importada (que era um .png ), uma versão .gif da imagem e um arquivo XML:
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
<o:MainFile HRef="../new.doc" />
<o:File HRef="image001.jpg" />
<o:File HRef="filelist.xml" />
</xml>
Agora isso não é bom o suficiente, pois quero que tudo seja mantido em um único arquivo .doc. Existe uma maneira de incorporar uma imagem em um arquivo .doc formatado em OpenXML?
Solução
olhe aqui http://www.tkachenko.com/blog/archives/000106.html
<w:pict>
<v:shapetype id="_x0000_t75" ...>
... VML shape template definition ...
</v:shapetype>
<w:binData w:name="wordml://02000001.jpg">
... Base64 encoded image goes here ...
</w:binData>
<v:shape id="_x0000_i1025" type="#_x0000_t75"
style="width:212.4pt;height:159pt">
<v:imagedata src="wordml://02000001.jpg"
o:title="Image title"/>
</v:shape>
</w:pict>
Outras dicas
Há Phpword Projeto para manipular o MS Word de dentro do PHP.
O PHPWORD é uma biblioteca escrita no PHP que cria documentos do Word. Nenhum sistema operacional Windows é necessário para uso, porque o resultado são arquivos DOCX (Office Open XML) que podem ser abertos por todos os principais softwares do Office.
Phpword pode escrevê -los http://phpword.codeplex.com/ (Nota: ainda está na versão beta. Eu usei muito o PhPexcel pelo mesmo cara ... nunca tentei a versão do Word).
Dê uma olhada na biblioteca Phpdocx para gerar arquivos .docx reais em vez de arquivos html com uma extensão .doc
PS A extensão deve ser estritamente .docx em vez de .doc para arquivos abertos xml word 2007
OPTBS pode criar documentos dinâmicos DOCX (e outros arquivos OpenXML) no PHP usando a técnica de modelos.
Não são necessários arquivos temporários, sem linhas de comando, tudo no PHP.
Pode adicionar ou excluir imagens. O documento criado pode ser produzido como um download HTML, um arquivo salvo no servidor ou como conteúdo binário no PHP.
Também pode mesclar arquivos opendocument (ODT, ODS, ODF, ...)
Se o texto rico está bem, tente Phprtf.
Eu usaria o phpexcel. Também pode funcionar com o OpenXML.
Aqui está o link: http://phpexcel.codeplex.com/