Создать документ Word с помощью PHP в Linux

Каковы доступные решения для PHP для создания документа Word в среде linux?

Ответ 1

реальные документы Word

Если вам нужно создать "реальные" документы Word, вам нужен веб-сервер на базе Windows и автоматизация COM. Я настоятельно рекомендую статью Джоэля по этому вопросу.

поддельные заголовки HTTP для обмана Word для открытия необработанного HTML

Довольно распространенная (но ненадежная) альтернатива:

header("Content-type: application/vnd.ms-word");
header("Content-Disposition: attachment; filename=document_name.doc");

echo "<html>";
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Windows-1252\">";
echo "<body>";
echo "<b>Fake word document</b>";
echo "</body>";
echo "</html>"

Убедитесь, что вы не используете внешние таблицы стилей. Все должно быть в одном файле.

Обратите внимание, что это не отправка фактического документа Word. Он просто заставляет браузеры предлагать его как загрузку и по умолчанию использовать расширение .doc. Старые версии Word могут часто открывать это без предупреждения/сообщения безопасности и просто импортировать необработанный HTML в Word. Отправка PHP, отправляющая этот вводящий в заблуждение заголовок Content-Type, не является реальным преобразованием формата файла.

Ответ 2

PHPWord может создавать документы Word в формате docx. Он также может использовать существующий файл .docx в качестве шаблона - переменные шаблона могут быть добавлены в документ в формате ${varname}

У этого есть лицензия LGPL, и примеры, которые пришли с кодом, работали хорошо для меня.

Ответ 3

Шаблоны OpenOffice + интерфейс командной строки OOo.

  • Создайте вручную шаблон ODT с заполнителями, например [% value-to-replace%]
  • При создании экземпляра шаблона с реальными данными в PHP, разархивируйте шаблон ODT (это заархивированный XML) и выполните против XML текстовую замену заполнителей фактическими значениями.
  • Zip ODT назад
  • Запустите преобразование ODT → DOC через интерфейс командной строки OpenOffice.

Доступны инструменты и библиотеки для облегчения каждого из этих шагов.

Может быть, это помогает.

Ответ 4

Самым простым способом создания файлов DOC в Linux с использованием PHP является компонент Zend Framework phpLiveDocx.

На веб-сайте проекта:

"phpLiveDocx позволяет разработчикам создавать документы, комбинируя структурированные данные с PHP с шаблоном, созданным в текстовом редакторе. Результирующий документ можно сохранить как файл PDF, DOCX, DOC или RTF. Концепция такая же, как и с слияния почты."

Ответ 5

OpenTBS может создавать динамические документы DOCX на PHP с использованием технологии шаблонов.

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

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

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

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

Ответ 6

Следуя за Иваном Кречетовым, ответьте, вот функция, которая выполняет слияние (фактически просто заменяет текст) для docx и odt, без необходимости в дополнительной библиотеке.

function mailMerge($templateFile, $newFile, $row)
{
  if (!copy($templateFile, $newFile))  // make a duplicate so we dont overwrite the template
    return false; // could not duplicate template
  $zip = new ZipArchive();
  if ($zip->open($newFile, ZIPARCHIVE::CHECKCONS) !== TRUE)
    return false; // probably not a docx file
  $file = substr($templateFile, -4) == '.odt' ? 'content.xml' : 'word/document.xml';
  $data = $zip->getFromName($file);
  foreach ($row as $key => $value)
    $data = str_replace($key, $value, $data);
  $zip->deleteName($file);
  $zip->addFromString($file, $data);
  $zip->close();
  return true;
}

Это заменит [Имя человека] с Миной и [Фамилия человека] с Mooo:

$replacements = array('[Person Name]' => 'Mina', '[Person Last Name]' => 'Mooo');
$newFile = tempnam_sfx(sys_get_temp_dir(), '.dat');
$templateName = 'personinfo.docx';
if (mailMerge($templateName, $newFile, $replacements))
{
  header('Content-type: application/msword');
  header('Content-Disposition: attachment; filename=' . $templateName);
  header('Accept-Ranges: bytes');
  header('Content-Length: '. filesize($file));
  readfile($newFile);
  unlink($newFile);
}

Помните, что эта функция может повредить документ, если строка для замены является слишком общей. Попытайтесь использовать вербальные строки замены, такие как [Имя человека].

Ответ 7

В проекте Apache есть библиотека под названием POI, которая может использоваться для создания файлов MS Office. Это Java-библиотека, но преимущество в том, что она может работать на Linux без проблем. У этой библиотеки есть свои ограничения, но она может выполнить эту работу для вас, и, вероятно, ее проще использовать, чем пытаться запустить Word.

Другим вариантом будет OpenOffice, но я не могу его точно рекомендовать, так как я никогда не использовал его.

Ответ 8

<?php
function fWriteFile($sFileName,$sFileContent="No Data",$ROOT)
    {
        $word = new COM("word.application") or die("Unable to instantiate Word");
        //bring it to front
        $word->Visible = 1;
        //open an empty document
        $word->Documents->Add();
        //do some weird stuff
        $word->Selection->TypeText($sFileContent);
        $word->Documents[1]->SaveAs($ROOT."/".$sFileName.".doc");
        //closing word
        $word->Quit();
        //free the object
        $word = null;
        return $sFileName;
    }
?>



<?php
$PATH_ROOT=dirname(__FILE__);
$Return ="<table>";
$Return .="<tr><td>Row[0]</td></tr>";
 $Return .="<tr><td>Row[1]</td></tr>";
$sReturn .="</table>";
fWriteFile("test",$Return,$PATH_ROOT);
?> 

Ответ 9

Существует два варианта создания качественных текстовых документов. Используйте COM для связи со словом (для этого требуется, по крайней мере, php-сервер Windows). Используйте openoffice и его API для создания и сохранения документов в текстовом формате.

Ответ 10

Взгляните на документы PHP COM (комментарии полезны) http://us3.php.net/com