2010-06-15 22 views
7

Alguien me ha pedido que haga una aplicación en php que generará un archivo .doc con una imagen y algunas tablas. Mi primer enfoque fue:cómo usar php para incluir una imagen en un archivo de palabras?

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

Esto utiliza la técnica de uri de datos para incrustar una imagen.

Esto generará un archivo html que se mostrará bien en los navegadores web, pero la imagen no se encuentra en Microsoft Office Word, al menos en la configuración estándar. Luego, mientras editaba el archivo con Word, reemplacé la imagen con una imagen del archivo y Microsoft Word cambió el contenido del archivo a Open XML y agregó 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 lo suficientemente bueno, ya sea desde que desea que esto sea todo lo mantienen en un solo archivo .doc. ¿Hay alguna manera de incrustar una imagen en un archivo .doc con formato OpenXML?

Respuesta

5

mira aquí 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> 
+0

No sé, ¿qué es este código y dónde usar esto, en php o html? ¿Podrías por favor definirlo un poco más? – Bajrang

+0

si recuerdo correctamente debe poner esto dentro de su archivo 'doc' (xml) generado. o puede guardar su archivo doc como xml y luego verificar su estructura interna, parece que es la forma en que usé este – llamerr

2

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

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

+1

lo siento, no puedo usar docx porque mi público objetivo no está utilizando la oficina-2007 –

+1

El único otro método que conozco está utilizando la extensión COM de PHP –

0

Si el texto enriquecido es correcto, intente PhpRtf.

3

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

+0

gracias ... su publicación me ayudó ... opto a favor de phpword ... ¿Encontró una mejor solución? – mysterious

+0

@mysterious: no, no he necesitado una nueva solución desde que escribí esa respuesta – Steve

4

Hay proyecto PHPWord para manipular MS Word desde PHP.

PHPWord es una biblioteca escrita en PHP que crea documentos de palabras. No se requiere el sistema operativo Windows para el uso porque el resultado son los archivos docx (Office Open XML) que se pueden abrir por el software de oficina principal.

2

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

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

Puede agregar o eliminar imágenes. El documento creado se puede producir como una descarga HTML, un archivo guardado en el servidor o como contenido binario en PHP.

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

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

Cuestiones relacionadas