Cómo usar PHP para incluir una imagen en un archivo de Word?
-
27-09-2019 - |
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?
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, ...)
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/