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

58

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

Ваш Ответ

10   ответов
0

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

7

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

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

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

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

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

0

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

3
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);
?> 
COM будет работать только на Windows. Плюс на сервере должен быть установлен MS Word. Stephan Weinhold
28

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

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

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

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

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

20

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

  1. Создайте вручную шаблон ODT с заполнителями, например [% value-to-replace%]
  2. При создании экземпляра шаблона с реальными данными в PHP разархивируйте шаблон ODT (этоs zip-XML), и запустите XML для текстовой замены заполнителей фактическими значениями.
  3. Застегните молнию на ОДТ назад
  4. Запустите конвертацию ODT -> DOC через интерфейс командной строки OpenOffice.

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

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

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

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

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

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

Кажется, требует подписки на сторонний сервис для доступа к API, который делает тяжелую работу. garrow
не компонент, а веб-сервис, возможно, лучшеphpdocx.com/features? DaveO
33

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

Если вам нужно произвестиреальный» Документы Word вам нужен веб-сервер на базе Windows. Я очень рекомендую ДжоэляСтатья на эту тему:joelonsoftware.com/items/2008/02/19.html Sergey Kornilov
Как я могу сохранить этот файл в своем каталоге на сервере вместо того, чтобы запрашивать его загрузку? jackkorbin
Проблема с этим подходом заключается в том, что я могуВставить график в мой документ. TechLearner
это побеждает создателей документов или необходимость использовать внутреннюю функцию для форматирования страниц. unixmiah
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, Я также исправил ошибку в примере. Arnout

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