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

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

Ответы на вопрос(10)

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

Create manually an ODT template with placeholders, like [%value-to-replace%] When instantiating the template with real data in PHP, unzip the template ODT (it's a zipped XML), and run against the XML the textual replace of the placeholders with the actual values. Zip the ODT back Run the conversion ODT -> DOC via OpenOffice command line interface.

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

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

 06 февр. 2011 г., 20:16
Не могли бы вы поделиться, какие библиотеки вы используете, или считаете, что они хороши для этих задач?
 09 февр. 2011 г., 16:32

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

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

 02 дек. 2013 г., 13:24
Договорились - это правильный ответ.
 10 окт. 2012 г., 16:37
Это ответ :) Там же есть библиотеки для генерации документов Excel и PowerPoint.
 10 авг. 2015 г., 05:14
Я нашел обновленную ссылкуPHPWord а такжеPHPOffice в GitHub.
<?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);
?> 
 23 мар. 2016 г., 12:42
COM будет работать только на Windows. Плюс на сервере должен быть установлен MS Word.
real Word documents

Если вам нужно произвести «реальный» Документы Word вам нужен веб-сервер на базе Windows и автоматизация COM. я очень рекомендуюСтатья Джоэла на эту тему.

fake HTTP headers for tricking Word into opening raw 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>"

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

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

 01 февр. 2011 г., 03:30
Для более подробного объяснения техники, упомянутой выше, проверьте эту статью -codeproject.com/kb/office/Wordyna.aspx
 18 дек. 2014 г., 19:24
это побеждает создателей документов или необходимость использовать внутреннюю функцию для форматирования страниц.
 24 сент. 2008 г., 07:46
Проблема с этим подходом состоит в том, что я не могу встраивать граф в свой документ.
 14 июл. 2013 г., 16:17
Если вы хотите использовать вышеизложенное и иметь некоторые сложные div-ы (для меня это была гистограмма на основе CSS), вы можете использовать этот код для создания снимка экрана div, загрузить его на сервер и изменить свой HTML-код на включить это изображение -kubilayerdogan.net/?p=304
 24 сент. 2008 г., 14:38
Если вам нужно произвести «реальный» Документы Word вам нужен веб-сервер на базе Windows. Я настоятельно рекомендую статью Джоэла на эту тему:joelonsoftware.com/items/2008/02/19.html

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

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

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

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

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

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

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

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

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

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

& php; phpLiveDocx позволяет разработчикам создавать документы, комбинируя структурированные данные из PHP с шаблоном, созданным в текстовом процессоре. Полученный документ можно сохранить в формате PDF, DOCX, DOC или RTF. Концепция такая же, как и с mail-merge. & Quot;

 10 июн. 2009 г., 01:46
Кажется, требует подписки на сторонний сервис, e для доступа к API, который делает тяжелую работу.
 01 сент. 2011 г., 00:06
не компонент, а веб-сервис, возможно, лучшеphpdocx.com/features?

Следуя ответу Ивана Кречетова, приведем функцию, которая выполняет слияние почты (фактически просто простую замену текста) для 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);
}

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

 27 мар. 2017 г., 10:30
Отличное решение. Обратите внимание, что функция tempnam_sfx не является стандартным PHP, вам нужно добавить ее, например, изstackoverflow.com/a/37515697/957841, Я также исправил ошибку в примере.

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

Ваш ответ на вопрос