Каковы доступные решения для PHP
для создания документа Word в среде linux
?
Создать документ Word с помощью PHP в 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,...)
Ответ 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