Динамическое создание документа doc / docx на рабочем столе пользователя. - PullRequest
1 голос
/ 12 марта 2012

Мой сайт - HTML / Javascript с AJAX, вызывающим PHP на стороне сервера. Я хочу позволить пользователю щелкнуть значок и создать отчет из данных MySQL, а затем сохранить его на рабочем столе клиента без перезагрузки страницы.

Варианты создания документа, насколько я понимаю, выглядят следующим образом. (Я полагаю, что это должно быть сделано на стороне сервера, а не с помощью Javascript.) Я не уверен, где файл заканчивается в каждом случае. Пожалуйста, не стесняйтесь исправить мои недоразумения:)

Метод 1 - появляется только для создания файла .doc. Я не уверен, куда положить файл.

$fp = fopen("method1.doc", 'w+');
$str = "<B>This is the text for the word file created through php programming</B>";
fwrite($fp, $str);
fclose($fp);

Метод 2 - также создается файл .doc.

$word = new COM("word.application") or die ("couldnt create an instance of word");
echo "loaded , word version{$word->version}";
$word->visible = 1;
$word->Documents->Add();
$word->Selection->TypeText("Sample text.");
$word->Documents[1]->SaveAs("method2.doc");
$word->Quit();
$word->Release();
$word = null;

Метод 3 - я думаю, также файл .doc.

header('Content-type: application/vnd.ms-word');
header("Content-Disposition: attachment;Filename=method3.doc");

echo "<html>";
echo "<body>";
echo "<b>My first document</b>";
echo "</body>";
echo "</html>";

Метод 4 - PHPWord

Метод 5 - PHPDocx

Я протестировал 1 и 2 в домашней среде разработчика, но я не могу найти файлы! Какой лучший путь вперед, пожалуйста?

Спасибо:)

Кстати, я знаю, что есть соответствующие сообщения здесь , здесь и здесь , но никто не отвечает на вопрос.

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

Если вы хотите иметь значок, и при щелчке по значку он выполняет загрузку без перезагрузки страницы, тогда вам просто нужно сделать ссылку на значок, который приведет к скрипту, который запускает загрузку с использованием соответствующих заголовков.

Пример:

header ('Pragma: no-cache');
header('Content-Disposition: attachment; filename="'.$File.'"');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: public');
header('Content-Description: File Transfer'); 
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.$Len);

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

Если вы хотитедля создания динамических файлов DOCX для загрузки я рекомендую использовать OpenTBS .Эта библиотека может генерировать DOCX (и XLSX, PPTX, ODT, ODS, ...), используя шаблоны.У него есть функция, позволяющая отправлять результат непосредственно в виде загрузки, без временных файлов или сохранять на стороне сервера.

1 голос
/ 12 марта 2012

Методы 1 и 2 создают документ на стороне сервера где-то в файловой системе (после этого вам нужно передать его клиенту).

Метод 3 создает документ в ответ на запрос клиента - в зависимости от настроек браузерасохранит его или откроет в окне (или спросит «Сохранить / Открыть / Отменить?»).

Я лично сделал бы java-апплет или флэш-приложение, которое будет иметь доступ к вашей локальной файловой системе.Может загружать документы с сервера и сохранять их в локальной файловой системе без перезагрузки страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...