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?

Foi útil?

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

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

http://www.tinybutstrong.com/opentbs.php

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/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top