Как использовать PHP, чтобы включить изображение в файл слова? - PullRequest
7 голосов
/ 15 июня 2010

Кто-то попросил меня создать приложение на 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 ]

5 голосов
/ 23 июля 2010

смотрите здесь 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>
4 голосов
/ 24 июля 2010

Существует PHPWord проект для управления MS Word из PHP.

PHPWord - это библиотека, написанная на PHP, которая создает документы Word.Для использования не требуется операционная система Windows, поскольку в результате создаются файлы docx (Office Open XML), которые могут быть открыты всеми основными офисными программами.

3 голосов
/ 24 июля 2010

PHPWord может написать их http://phpword.codeplex.com/ (примечание: он все еще в бета-версии. Я много раз использовал PHpExcel тем же парнем ... никогда не пробовал версию Word).

2 голосов
/ 01 апреля 2011

OpenTBS может создавать динамические документы DOCX (и другие файлы OpenXML) в PHP, используя технику шаблонов.

Не требуется никаких временных файлов, командных строк, все в PHP.

Может добавлять или удалять картинки.Созданный документ может быть создан в виде загрузки HTML, файла, сохраненного на сервере, или в виде двоичного содержимого в PHP.

Он также может объединять файлы OpenDocument (ODT, ODS, ODF, ...)

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

2 голосов
/ 15 июня 2010

Посмотрите библиотеку phpdocx для создания реальных файлов .docx, а не html-файлов с расширением .doc

PS расширение должно быть строго .docx, а не .doc для файлов Open XML Word 2007

0 голосов
/ 23 июля 2010

Я бы использовал PHPExcel. Он также может работать с OpenXML.

Вот ссылка: http://phpexcel.codeplex.com/

0 голосов
/ 16 июня 2010

Если форматированный текст в порядке, попробуйте PhpRtf .

...