Вопрос по ms-word, linux, php, document – Создать документ Word с помощью PHP в Linux [закрыто]
OpenTBS Можно создавать динамические документы DOCX в PHP, используя технику шаблонов.
Не требуется никаких временных файлов, никаких командных строк, все на PHP.
Он может добавлять или удалять картинки. Созданный документ может быть создан в виде загрузки HTML, файла, сохраненного на сервере, или в виде двоичного содержимого в PHP.
Он также может объединять файлы OpenDocument (ODT, ODS, ODF, ...)
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;
}
?>
";
$Return .="Row[0] ";
$Return .="Row[1] ";
$sReturn .="";
fWriteFile("test",$Return,$PATH_ROOT);
?>
PHPWord может генерировать документы Word в формате DOCX. Он также может использовать существующий файл .docx в качестве шаблона - переменные шаблона могут быть добавлены в документ в формате $ {varname}
У него есть лицензия LGPL, и примеры, которые идут с кодом, хорошо работают для меня.
Проект Apache имеет библиотеку под названиемPOI который может быть использован для создания файлов MS Office. Это библиотека Java, но преимущество в том, что она может работать на Linux без проблем. Эта библиотека имеет свои ограничения, но она может сделать работу за вас, и этоВозможно, проще в использовании, чем пытаться запустить Word.
Другой вариант будет OpenOffice, но я могуточно не рекомендую, так как ямы никогда не использовали это.
Шаблоны OpenOffice + интерфейс командной строки OOo.
- Создайте вручную шаблон ODT с заполнителями, например [% value-to-replace%]
- При создании экземпляра шаблона с реальными данными в PHP разархивируйте шаблон ODT (этоs zip-XML), и запустите XML для текстовой замены заполнителей фактическими значениями.
- Застегните молнию на ОДТ назад
- Запустите конвертацию ODT -> DOC через интерфейс командной строки OpenOffice.
Для облегчения каждого из этих шагов доступны инструменты и библиотеки.
Может быть, это помогает.
Безусловно, самый простой способ создания файлов DOC в Linux с использованием PHP - это компонент Zend Framework.phpLiveDocx.
С веб-сайта проекта:
phpLiveDocx позволяет разработчикам генерировать документы, комбинируя структурированные данные из PHP с шаблоном, созданным в текстовом процессоре. Полученный документ можно сохранить в формате PDF, DOCX, DOC или RTF. Концепция такая же, как с mail-merge. "
настоящие документы Word
Если вам нужно произвестиреальный» Документы Word вам нужен веб-сервер на базе Windows и автоматизация COM. я очень рекомендуюДжоэлстатья на эту тему.
не настоящие Заголовки HTTP для обмана Word в открытие необработанного HTML
Довольно распространенная (но ненадежная) альтернатива:
header("Content-type: application/vnd.ms-word");
header("Content-Disposition: attachment; filename=document_name.doc");
echo "";
echo "";
echo "";
echo "Fake word document";
echo "";
echo ""
Убедитесь, что вы неt использовать внешние таблицы стилей. Все должно быть в одном файле.
Обратите внимание, что это делаетне отправить фактический документ Word. Это просто обманывает браузеры, предлагая его в качестве загрузки и по умолчанию.doc
расширение файла. Старые версии Word могут часто открывать это без каких-либо предупреждений / сообщений безопасности и просто импортировать необработанный HTML-код в Word. PHP отправка отправка, которая вводит в заблуждениеContent-Type
заголовок вместе не представляет собой реальное преобразование формата файла.
Следуя за Иваном КречетовымОтвет, вот функция, которая выполняет слияние почты (на самом деле просто замену текста) для 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);
}
Помните, что эта функция может повредить документ, если строка для замены является слишком общей. Попробуйте использовать подробные замещающие строки, например [Персона].