Pregunta

Alguien me ha pedido hacer una aplicación en PHP que generará un archivo .doc con una imagen y un par de mesas en el mismo. Mi primer acercamiento fue:

<?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);
?>

Este utiliza los datos técnica uri de la incrustación de una imagen.

Esto generará un archivo HTML que se rindió bien en los navegadores web, pero la imagen no se encuentra en Microsoft Office Word, por lo menos en la configuración estándar. Entonces, mientras se edita el archivo con Word, tengo reemplazar la imagen con una imagen de archivo de Microsoft Word y cambió el contenido del archivo en XML abiertos y se añade una carpeta, new_files donde puso la imagen importada (que era un .png ), una versión .gif de la imagen y un archivo 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>

Ahora bien, esto no es suficiente, ya sea como quiero que esto se mantuvo todo en un solo archivo .doc. ¿Hay una manera de incrustar una imagen en un archivo .doc OpenXML con formato?

¿Fue útil?

Solución

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>

Otros consejos

Hay PHPWord proyecto de manipular MS Word desde dentro de PHP.

  

PHPWord es una biblioteca escrita en PHP   que crean documentos de texto. No hay ventanas   Se necesita el sistema operativo para el uso   porque el resultado son archivos docx   (Office Open XML) que se puede abrir   por todos los principales software de oficina.

PHPWord puede escribirlas http://phpword.codeplex.com/ (nota: su todavía en beta. he usado PHPExcel por el mismo tipo mucho ... nunca trató de la versión de Word).

Tener un vistazo a la biblioteca phpdocx para generar archivos .docx reales en lugar de los archivos html con una extensión .doc

PS la extensión debe ser estrictamente .docx en lugar de .doc para archivos XML abierto de Word 2007

OpenTBS puede crear DOCX (y otros archivos OpenXML) documentos dinámicos en PHP utilizando la técnica de plantillas.

No hay archivos temporales necesarios, no hay líneas de comando, todo en PHP.

Se puede añadir o eliminar imágenes. El documento creado se puede producir como una descarga HTML, un archivo guardado en el servidor, o como contenido binario de PHP.

También puede combinar archivos OpenDocument (ODT, ODS, ODF, ...)

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

Si el texto está bien rica intento PhpRtf .

Yo usaría PHPExcel. Puede trabajar con OpenXML también.

Aquí está el enlace: http://phpexcel.codeplex.com/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top