Как использовать PHP, чтобы включить изображение в файл слова?
Кто-то попросил меня создать приложение на php, которое будет генерировать файл.doc с изображением и несколькими таблицами в нем. Мой первый подход был:
<?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);
?>
Это использует технику data uri для встраивания изображения.
Это создаст HTML-файл, который будет отображаться нормально в веб-браузерах, но изображение отсутствует в Microsoft Office Word, по крайней мере, в стандартной настройке. Затем, редактируя файл с помощью Word, я заменил изображение изображением из файла, а Microsoft Word изменил содержимое файла на Open XML и добавил папку, new_files, в которую он поместил импортированное изображение (которое было.png). GIF-версия изображения и 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>
Теперь этого тоже недостаточно, так как я хочу, чтобы все это хранилось в одном файле.doc. Есть ли способ встроить изображение в файл.doc в формате OpenXML?
7 ответов
Смотрите здесь 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>
Есть PHPWord проект для работы с MS Word изнутри PHP.
PHPWord - это библиотека, написанная на PHP, которая создает текстовые документы. Для использования не требуется операционная система Windows, поскольку в результате создаются файлы docx (Office Open XML), которые могут быть открыты всеми основными офисными программами.
PHPWord может написать их http://phpword.codeplex.com/ (примечание: он все еще в бета-версии. Я использовал PHpExcel одним и тем же парнем... никогда не пробовал версию Word).
OpenTBS может создавать динамические документы DOCX (и другие файлы OpenXML) в PHP, используя технику шаблонов.
Не требуется никаких временных файлов, никаких командных строк, все на PHP.
Он может добавлять или удалять картинки. Созданный документ может быть создан в виде загрузки в формате HTML, файла, сохраненного на сервере, или в виде двоичного содержимого в PHP.
Он также может объединять файлы OpenDocument (ODT, ODS, ODF,...)
Взгляните на библиотеку phpdocx для создания реальных файлов.docx, а не html-файлов с расширением.doc
PS расширение должно быть строго.docx, а не.doc для файлов Open XML Word 2007
Я бы использовал PHPExcel. Он также может работать с OpenXML.
Вот ссылка: http://phpexcel.codeplex.com/