как использовать php для включения изображения в файл word?

StackOverflow https://stackoverflow.com/questions/3046735

Вопрос

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

При этом используется метод встраивания изображения с использованием uri данных.

Это сгенерирует html-файл, который будет нормально отображаться в веб-браузерах, но изображение отсутствует в Microsoft Office Word, по крайней мере, в стандартной настройке.Затем, редактируя файл с помощью Word, я заменил изображение изображением из file, и 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?

Это было полезно?

Решение

посмотри сюда 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>

Другие советы

Есть PHP - слово проект для управления MS Word из PHP.

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top