Вопрос по linux, php, ms-word, document – Создать документ Word с помощью PHP в Linux [закрыто]

58

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

Ваш Ответ

10   ответов
10

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

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

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

не компонент, а веб-сервис, возможно, лучшеphpdocx.com/features?
Кажется, требует подписки на сторонний сервис, e для доступа к API, который делает тяжелую работу.
3
<?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);
?> 
COM будет работать только на Windows. Плюс на сервере должен быть установлен MS Word.
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);
}

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

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

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

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

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

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

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

20

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

  1. Create manually an ODT template with placeholders, like [%value-to-replace%]
  2. 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.
  3. Zip the ODT back
  4. Run the conversion ODT -> DOC via OpenOffice command line interface.

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

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

Не могли бы вы поделиться, какие библиотеки вы используете, или считаете, что они хороши для этих задач?
33

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 заголовок вместе не представляет собой реальное преобразование формата файла.

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

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

3

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

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

28

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

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

Я нашел обновленную ссылкуPHPWord а такжеPHPOffice в GitHub.
Договорились - это правильный ответ.
Это ответ :) Там же есть библиотеки для генерации документов Excel и PowerPoint.
0

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

Похожие вопросы